整合思路:

1.SQLSessionFactory对象应该放到Spring中作为单例存在

2.传统dao开发方式中,应该从Spring容器中获得SqlSession对象

3.Mapper代理行驶中,应该从Spring容器中直接获得Mapper的代理对象

4.数据库的连接以及数据库连接池事务管理交给Spring容器来完成

整合步骤:

  • 创建工程,导入jar包
  • 创建mybatis的配置文件sqlmapConfig.xml
  • 编写Sring配置文件
  • 数据库连接以及连接池
  • sqlSessionFactory对象,配置到Spring容器中
  • Spring配置文件 applicaitonContext.xml
  • jdbc.properties
  • 日志记录log4j.properties

Dao开发:传统DAO与动态代理DAO

传统Dao开发:

创建user.xml,并在sqlSessionConfig中配置加载

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace:命名空间,用于隔离sql语句,后继有重要作用 #{}:占位符,相当于jdbc的?? -->
<mapper namespace="user"> <!-- id:sql id, 语句的唯一标识 parameterType:入参数据类型 resultType:返回结果的数据类型 -->
<select id="getUserById" parameterType="int" resultType="com.mybaits03.pojo.User">
SELECT *
FROM `user` WHERE id = #{id2};
</select> <!-- 模糊查询用户,结果为集合,设置resultType为pojo路径即可 -->
<select id="getUserByUserName" parameterType="String"
resultType="com.mybaits03.pojo.User">
SELECT
`id`,
`username`,
`birthday`,
`sex`,
`address`
FROM
`user`
<!-- WHERE username LIKE #{name}; -->
WHERE username LIKE '%${value}%';
</select> <!-- 插入用户,如果用户id为自增,则删去id.入参为user pojo -->
<insert id="insertUser" parameterType="com.mybaits03.pojo.User" useGeneratedKeys="true" keyProperty="id" >
<!--
selectKey:主键返回
keyProperty:user中的主键属性
resultType:主键的数据类型
order:指定selectKey何时执行(在插入语句之前还是之后设置属性)
-->
INSERT INTO `user` (
`username`,
`birthday`,
`sex`,
`address`,
`uuid2`
)
VALUES
(
#{username},
#{birthday},
#{sex},
#{address},
#{uuid2}
);
</insert>
</mapper>

创建UserDao接口

创建UserDaoImpl,继承SqlSessionDaoSupport

package com.mybaits03.dao.impl;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.support.SqlSessionDaoSupport; import com.mybaits03.dao.UserDao;
import com.mybaits03.pojo.User; public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao { @Override
public User getUserById(Integer id) {
SqlSession sqlSession = super.getSqlSession();
User user = sqlSession.selectOne("user.getUserById", id);
//不能关闭,由Spring管理
return user;
} @Override
public List<User> getUserByUsername(String username) {
SqlSession sqlSession = super.getSqlSession();
List<User> list = sqlSession.selectList("user.getUserByUsername", username);
return list;
} @Override
public void insertUser(User user) {
SqlSession sqlSession = super.getSqlSession();
sqlSession.insert("user.insertUser",user);
} }

单元测试:

package com.mybaits03.test;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.mybaits03.dao.UserDao;
import com.mybaits03.pojo.User; public class UserDaoTest { private ApplicationContext applicaitonContext; @Before
public void init() {
applicaitonContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
} @Test
public void testGetUserById() {
UserDao userDao = applicaitonContext.getBean(UserDao.class);
User user = userDao.getUserById(1);
System.out.println(user);
} @Test
public void testGetUserByUsername() { } @Test
public void testInsertUser() { } }

动态代理DAO:

UserMapper.java

package com.mybaits03.mapper;

import java.util.List;

import com.mybaits03.pojo.User;

public interface UserMapper {
/**
* 根据用户ID查询用户信息
* @param id
* @return
*/
User getUserById(Integer id); /**
* 根据用户名查找用户列表
* @param username
* @return
*/
List<User> getUserByUsername(String username); /**
* 添加用户
* @param user
*/
void insertUser(User user); }

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.mybaits03.mapper.UserMapper">
<!-- id: sql id
parameterType:入参类型
resultMap:返回结果的数据类型
#{}:占位符号,相当于jdbc 的 ?
${}:字符串拼接指令,如果入参为普通数据类型{}内部只写value
--> <!-- sql片段的抽取定义 -->
<sql id="user_sql">
`id`,
`username`,
`birthday`,
`sex`,
`address`
</sql> <select id="getUserById" parameterType="int" resultType="User">
select
<!-- sql片段的使用 refid: 引用调用好的sql id -->
<include refid="user_sql"></include>
from user where id = #{id}
</select> <select id="getUserByUsername" parameterType="string" resultType="user">
select * from user where username like '%${value}%'
</select> <!-- keyProperty:主键 -->
<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into user (username,birthday,sex,address,uuid2)
values (#{username},#{birthday},#{sex},#{address},#{uuid2})
</insert> </mapper>

编写Sring配置文件

  • 数据库连接以及连接池
  • sqlSessionFactory对象,配置到Spring容器中
  • Dao,传统、动态代理
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <!-- 加载配置文件 -->
<context:property-placeholder location="classpath:jdbc.properties" /> <!-- 数据库连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${name}" />
<property name="password" value="${password}" />
<!-- 连接池的最大数据库连接数 -->
<property name="maxActive" value="10" />
<!-- 最大空闲数 -->
<property name="maxIdle" value="5" />
</bean> <!--SqlSessionFactory配置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据库连接池,加载mybatis核心配置文件,配置别名包扫描 -->
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:SqlMapConfig.xml"/>
<property name="typeAliasesPackage" value="com.mybaits03.pojo"/>
</bean> <!-- 传统Dao配置 -->
<bean class="com.mybaits03.dao.impl.UserDaoImpl">
<!-- 注入sqlSessionFactory -->
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean> <!-- 动态代理第一种方式:配置单个接口 -->
<!-- <bean id="baseMapper" class="org.mybatis.spring.mapper.MapperFactoryBean" abstract="true" lazy-init="true">
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
配置一个接口
<bean parent="baseMapper">
<property name="mapperInterface" value="com.mybaits03.mapper.UserMapper" />
</bean> --> <!-- 动态代理第二种方式:包扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.mybaits03.mapper" />
</bean>
</beans>

jar包

包结构

七 MyBatis整合Spring,DAO开发(传统DAO&动态代理DAO)的更多相关文章

  1. MyBatis开发Dao的原始Dao开发和Mapper动态代理开发

    目录 咳咳...初学者看文字(Mapper接口开发四个规范)属实有点费劲,博主我就废了点劲做了如下图,方便理解: 原始Dao开发方式 1. 编写映射文件 3.编写Dao实现类 4.编写Dao测试 Ma ...

  2. Mybatis框架三:DAO层开发、Mapper动态代理开发

    这里是最基本的搭建:http://www.cnblogs.com/xuyiqing/p/8600888.html 接下来做到了简单的增删改查:http://www.cnblogs.com/xuyiqi ...

  3. JAVAEE——Mybatis第二天:输入和输出映射、动态sql、关联查询、Mybatis整合spring、Mybatis逆向工程

    1. 学习计划 1.输入映射和输出映射 a) 输入参数映射 b) 返回值映射 2.动态sql a) If标签 b) Where标签 c) Sql片段 d) Foreach标签 3.关联查询 a) 一对 ...

  4. (转)MyBatis框架的学习(六)——MyBatis整合Spring

    http://blog.csdn.net/yerenyuan_pku/article/details/71904315 本文将手把手教你如何使用MyBatis整合Spring,这儿,我本人使用的MyB ...

  5. Mybatis整合spring(适合小白)

    目录 1.整合思路 2.整合需要的jar包 3.整合的步骤 4.Dao的开发的两种实现方式 6.Dao的开发的实现方式总结图 @ Mybatis整合spring其实就是SSM框架中SM的整合集成. 1 ...

  6. Mybatis整合spring详细教程(适合小白童鞋)

    目录 1.整合思路 2.整合需要的jar包 3.整合的步骤 4.Dao的开发的两种实现方式 6.Dao的开发的实现方式总结图 @ Mybatis整合spring其实就是SSM框架中SM的整合集成. 1 ...

  7. 160330、Mybatis整合Spring

    转自csdn文章 http://haohaoxuexi.iteye.com/blog/1843309 Mybatis整合Spring 根据官方的说法,在ibatis3,也就是Mybatis3问世之前, ...

  8. JavaWeb_(Mybatis框架)MyBatis整合Spring框架

    MyBatis + Spring整合开发 a)使用Spring容器用单例模式管理Mybatis的sqlSessionFactory:b)使用Spring管理连接池.数据源等:c)将Dao/Mapper ...

  9. MyBatis整合Spring原理分析

    目录 MyBatis整合Spring原理分析 MapperScan的秘密 简单总结 假如不结合Spring框架,我们使用MyBatis时的一个典型使用方式如下: public class UserDa ...

随机推荐

  1. 【PAT甲级】1075 PAT Judge (25 分)

    题意: 输入三个正整数N,K,M(N<=10000,K<=5,M<=100000),接着输入一行K个正整数表示该题满分,接着输入M行数据,每行包括学生的ID(五位整数1~N),题号和 ...

  2. 基于SILVACO ATLAS的a-IGZO薄膜晶体管二维器件仿真(06)

    在知网看到了江南大学的硕士论文: 双有源层a-IGZO薄膜晶体管的特性仿真 IGZO/IZO双有源层薄膜晶体管特性的模拟研究 发现,我昨天的文章中参数的设置存在重大失误,如下材料定义语句中: mate ...

  3. Tensorflow2.0默认下载数据集到C盘的修改方法

    jupyter(Win版本)下载数据集会默认到C盘下,Linux会默认到root下,修改方式如下· tf1.x: import os import tensorflow as tftf.disable ...

  4. MySQL8.0.11安装后,使用CMD无法启动mysql服务

    首先,先把mysql的bin路径添加到系统环境变量 这样做可以,直接进入CMD后执行mysql服务,不需要进入mysql的bin文件路径去执行. 第一步:在MySQL的安装文件的bin目录(例如:C: ...

  5. C语言:对长度为7的字符串,除首尾字符外,将其余5个字符按ASCII降序排序。-计算并输出3~n之间所有素数的平方根之和。

    //对长度为7的字符串,除首尾字符外,将其余5个字符按ASCII降序排序. #include <stdio.h> #include <ctype.h> #include < ...

  6. Python - 私有属性(双下线的变形)

    __x会自动变形为_类名__x 正常情况 class A: def foo(self): print('from A') def test(self): self.foo() class B(A): ...

  7. nfs的原理 安装配置方法 centos6.5

    NFS周边 Network File System 作用 像访问本地文件一样去访问NFS服务器上的文件,目录 引用场景: ..1 用户上传的静态文件---图片,视频,用户上传的视频,头像 ..2 中小 ...

  8. 吴裕雄 python 神经网络——TensorFlow训练神经网络:不使用激活函数

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data INPUT_NODE = 784 ...

  9. java中使用静态字段和构造函数跟踪某个类所创建对象的个数

    对于这个问题,我们都知道java中使用类时会自动调用构造函数.按照这个思路我们可以定义一个static int 形的常量count 然后将count++放入这个类的构造函数中,这样只要输出count的 ...

  10. 使用类进行面向对象编程 Class 实例化 和 ES5实例化 对比,继承

    ES5 写法 function Book(title, pages, isbn) { this.title = title; this.pages = pages; this.isbn = isbn; ...