MyBatis整合Spring
1.SqlSessionFactory对象应该放到spring容器中作为单例存在
2.传统Dao的开发方式中,应该从spring容器中获得sqlsession对象
3.Mapper代理形式中,应该从spring容器中直接获得mapper的代理对象
4.数据库的连接以及数据库连接池事务管理都交给spring容器中完成。
1.整合需要的jar包
1.spring的jar包
2.Mybatis的jar包
3.spring+mybatis的整合包
4.MySql的数据库驱动jar包
5.数据库连接池的jar包
2.整合的步骤
1.创建一个java工程
2.导入前面提到的jar包
3.加入配置文件mybatisSpring
1 1》创建资源文件夹config 2 3 2》创建SqlMapConfig.xml文件。如下 4 5 <?xml version="1.0" encoding="UTF-8" ?> 6 7 <!DOCTYPE configuration 8 9 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 10 11 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 12 13 <configuration> 14 15 <!-- 设置别名 --> 16 17 <typeAliases> 18 19 <!-- 2. 指定扫描包,会把包内所有的类都设置别名,别名的名称就是类名,大小写不敏感 --> 20 21 <package name="com.test.mybatis.pojo" /> 22 23 </typeAliases> 24 25 </configuration>
3》创建spring的文件applicationContext.xml。如下
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <beans xmlns="http://www.springframework.org/schema/beans" 4 5 xmlns:context="http://www.springframework.org/schema/context" 6 7 xmlns:p="http://www.springframework.org/schema/p" 8 9 xmlns:aop="http://www.springframework.org/schema/aop" 10 11 xmlns:tx="http://www.springframework.org/schema/tx" 12 13 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 14 15 xsi:schemaLocation="http://www.springframework.org/schema/beans 16 17 http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 18 19 http://www.springframework.org/schema/context 20 21 http://www.springframework.org/schema/context/spring-context-4.0.xsd 22 23 http://www.springframework.org/schema/aop 24 25 http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 26 27 http://www.springframework.org/schema/tx 28 29 http://www.springframework.org/schema/tx/spring-tx-4.0.xsd 30 31 http://www.springframework.org/schema/util 32 33 http://www.springframework.org/schema/util/spring-util-4.0.xsd"> 34 35 36 37 <context:property-placeholder location="classpath:jdbc.propertis"/> 38 39 <!-- dbcp数据源 --> 40 41 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 42 43 <property name="driverClassName" value="${jdbc.driver}"/> 44 45 <property name="url" value="${jdbc.url}"/> 46 47 <property name="username" value="${jdbc.username}"/> 48 49 <property name="password" value="${jdbc.password}"/> 50 51 <property name="maxActive" value="10"/> 52 53 <property name="maxIdle" value="5"/> 54 55 </bean> 56 57 </beans>
4》创建jdbc.properties的文件,如下
1 jdbc.driver=com.mysql.jdbc.Driver 2 3 jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8 4 5 jdbc.username=root 6 7 jdbc.password=root
5》创建日志log4j.properties
1 # Global logging configuration 2 3 log4j.rootLogger=DEBUG, stdout 4 5 # Console output... 6 7 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 8 9 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 10 11 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
6》最终效果
Dao开发
两种dao实现方式:
1.原始dao的开发方式
2.使用mapper代理形式开发方式
a.直接配置Mapper代理
b.使用扫描包配置Mapper代理
需求:1.实现根据用户id查询用户
2.实现根据用户名称模糊查询
3.添加用户
1.创建pojo
1 public class User { 2 3 private int id; 4 5 private String username;// 用户姓名 6 7 private String sex;// 性别 8 9 private Date birthday;// 生日 10 11 private String address;// 地址 12 13 get/set。。。 14 15 }
Mapper代理形式开发Dao
1》编写UserMapper.xml配置文件如下:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 3 <!DOCTYPE mapper 4 5 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 6 7 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 8 9 <mapper namespace="com.test.mybatis.mapper.UserMapper"> 10 11 <select id="findUserById" parameterType="Integer" resultType="User"> 12 13 select * from user where id = #{v} 14 15 </select> 16 17 </mapper>
2》实现UserMapper接口
1 package com.test.mybatis.mapper; 2 3 import com.test.mybatis.pojo.User; 4 public interface UserMapper { 5 //查询 6 public User findUserById(Integer id); 7 8 }
3》方式一:配置mapper代理
1 <!--Mapper代理开发方式一: 配置Mapper对象 --> 2 <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> 3 <!-- 配置SqlSessionFactory--> 4 <property name="sqlSessionFactory" ref="SqlSessionFactoryBean" /> 5 <!-- 配置mapper接口 --> 6 <property name="mapperInterface" value="com.test.mybatis.mapper.UserMapper" /> 7 </bean>
方式二:扫描包形式配置mapper
1 <!-- Mapper动态代理开发 扫描包--> 2 3 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 4 5 <!-- 配置mapper接口 --> 6 7 <property name="basePackage" value="com.test.mybatis.mapper" /> 8 9 </bean>
5.》测试
1 public class JunitTest { 2 3 @Test 4 5 public void testMapper(){ 6 7 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); 8 9 //方式1 10 11 //ac.getBean(UserMapper.class); 12 13 //方式2 14 15 UserMapper um = (UserMapper)ac.getBean("userMapper"); 16 17 User u = um.findUserById(10); 18 19 System.out.println(u); 20 21 } 22 23 }
效果: