网站负责人查询,重庆网络技术有限公司,番禺人才网招聘网官网,国外域名购买网站整合思路
1、SqlSessionFactory对象应该放到spring容器中作为单例存在。 2、传统dao的开发方式中#xff0c;应该从spring容器中获得sqlsession对象。 3、Mapper代理形式中#xff0c;应该从spring容器中直接获得mapper的代理对象。 4、数据库的连接以及数据库连接池事务…整合思路
1、SqlSessionFactory对象应该放到spring容器中作为单例存在。 2、传统dao的开发方式中应该从spring容器中获得sqlsession对象。 3、Mapper代理形式中应该从spring容器中直接获得mapper的代理对象。 4、数据库的连接以及数据库连接池事务管理都交给spring容器来完成。
整合需要的jar包
1、spring的jar包 2、Mybatis的jar包 3、Springmybatis的整合包。 4、Mysql的数据库驱动jar包。 5、数据库连接池的jar包。
配置文件 SqlMapConfig.xml
配置文件是SqlMapConfig.xml如下
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configuration
PUBLIC -//mybatis.org//DTD Config 3.0//EN
http://mybatis.org/dtd/mybatis-3-config.dtd
configuration!-- 设置别名 --typeAliases!-- 2. 指定扫描包会把包内所有的类都设置别名别名的名称就是类名大小写不敏感 --package namecn.itcast.mybatis.pojo //typeAliases/configurationapplicationContext.xml
SqlSessionFactoryBean属于mybatis-spring这个jar包
如何查看SqlSessionFactoryBean源码
对于spring来说mybatis是另外一个架构需要整合jar包。
在项目中加入mybatis-spring-1.2.2.jar的源码如下图 效果如下图所示图标变化表示源码加载成功 整合Mybatis需要的是SqlSessionFactoryBean位置如下图
applicationContext.xml配置内容如下
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:contexthttp://www.springframework.org/schema/context xmlns:phttp://www.springframework.org/schema/pxmlns:aophttp://www.springframework.org/schema/aop xmlns:txhttp://www.springframework.org/schema/txxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://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.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd!-- 加载配置文件 --context:property-placeholder locationclasspath:db.properties /!-- 数据库连接池 --bean iddataSource classorg.apache.commons.dbcp.BasicDataSourcedestroy-methodcloseproperty namedriverClassName value${jdbc.driver} /property nameurl value${jdbc.url} /property nameusername value${jdbc.username} /property namepassword value${jdbc.password} /property namemaxActive value10 /property namemaxIdle value5 //bean!-- 配置SqlSessionFactory --bean idsqlSessionFactory classorg.mybatis.spring.SqlSessionFactoryBean!-- 配置mybatis核心配置文件 --property nameconfigLocation valueclasspath:SqlMapConfig.xml /!-- 配置数据源 --property namedataSource refdataSource //bean
/beansdb.properties
jdbc.drivercom.mysql.jdbc.Driver
jdbc.urljdbc:mysql://localhost:3306/mybatis?characterEncodingutf-8
jdbc.usernameroot
jdbc.passwordrootlog4j.properties
# Global logging configuration
log4j.rootLoggerDEBUG, stdout
# Console output...
log4j.appender.stdoutorg.apache.log4j.ConsoleAppender
log4j.appender.stdout.layoutorg.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern%5p [%t] - %m%n效果 Dao的开发 两种dao的实现方式 1、原始dao的开发方式 2、使用Mapper代理形式开发方式 a) 直接配置Mapper代理 b) 使用扫描包配置Mapper代理需求 1. 实现根据用户id查询 2. 实现根据用户名模糊查询 3. 添加用户 创建pojo
public class User {private int id;private String username;// 用户姓名private String sex;// 性别private Date birthday;// 生日private String address;// 地址get/set。。。
}传统dao的开发方式
原始的DAO开发接口实现类来完成。 需要dao实现类需要继承SqlsessionDaoSupport类
实现Mapper.xml
编写User.xml配置文件如下
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapper
PUBLIC -//mybatis.org//DTD Mapper 3.0//EN
http://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacetest!-- 根据用户id查询 --select idqueryUserById parameterTypeint resultTypeuserselect * from user where id #{id}/select!-- 根据用户名模糊查询用户 --select idqueryUserByUsername parameterTypestringresultTypeuserselect * from user where username like %${value}%/select!-- 添加用户 --insert idsaveUser parameterTypeuserselectKey keyPropertyid keyColumnid orderAFTERresultTypeintselect last_insert_id()/selectKeyinsert into user(username,birthday,sex,address)values(#{username},#{birthday},#{sex},#{address})/insert/mapper加载Mapper.xml
在SqlMapConfig如下图进行配置:
实现UserDao接口
public interface UserDao {/*** 根据id查询用户* * param id* return*/User queryUserById(int id);/*** 根据用户名模糊查询用户列表* * param username* return*/ListUser queryUserByUsername(String username);/*** 保存* * param user*/void saveUser(User user);}实现UserDaoImpl实现类
编写DAO实现类实现类必须集成SqlSessionDaoSupport SqlSessionDaoSupport提供getSqlSession()方法来获取SqlSession
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {Overridepublic User queryUserById(int id) {// 获取SqlSessionSqlSession sqlSession super.getSqlSession();// 使用SqlSession执行操作User user sqlSession.selectOne(queryUserById, id);// 不要关闭sqlSessionreturn user;}Overridepublic ListUser queryUserByUsername(String username) {// 获取SqlSessionSqlSession sqlSession super.getSqlSession();// 使用SqlSession执行操作ListUser list sqlSession.selectList(queryUserByUsername, username);// 不要关闭sqlSessionreturn list;}Overridepublic void saveUser(User user) {// 获取SqlSessionSqlSession sqlSession super.getSqlSession();// 使用SqlSession执行操作sqlSession.insert(saveUser, user);// 不用提交,事务由spring进行管理// 不要关闭sqlSession}
}配置dao
把dao实现类配置到spring容器中如下图
测试方法
创建测试方法可以直接创建测试Junit用例。 如下图所示进行创建。 编写测试方法如下 public class UserDaoTest { private ApplicationContext context;
Before
public void setUp() throws Exception {this.context new ClassPathXmlApplicationContext(classpath:applicationContext.xml);
}Test
public void testQueryUserById() {// 获取userDaoUserDao userDao this.context.getBean(UserDao.class);User user userDao.queryUserById(1);System.out.println(user);
}Test
public void testQueryUserByUsername() {// 获取userDaoUserDao userDao this.context.getBean(UserDao.class);ListUser list userDao.queryUserByUsername(张);for (User user : list) {System.out.println(user);}
}Test
public void testSaveUser() {// 获取userDaoUserDao userDao this.context.getBean(UserDao.class);User user new User();user.setUsername(曹操);user.setSex(1);user.setBirthday(new Date());user.setAddress(三国);userDao.saveUser(user);System.out.println(user);
}}
Mapper代理形式开发dao
编写UserMapper.xml配置文件如下
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapper
PUBLIC -//mybatis.org//DTD Mapper 3.0//EN
http://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecn.itcast.mybatis.mapper.UserMapper!-- 根据用户id查询 --select idqueryUserById parameterTypeint resultTypeuserselect * from user where id #{id}/select!-- 根据用户名模糊查询用户 --select idqueryUserByUsername parameterTypestringresultTypeuserselect * from user where username like %${value}%/select!-- 添加用户 --insert idsaveUser parameterTypeuserselectKey keyPropertyid keyColumnid orderAFTERresultTypeintselect last_insert_id()/selectKeyinsert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})/insert
/mapper实现UserMapper接口
public interface UserMapper {/*** 根据用户id查询* * param id* return*/User queryUserById(int id);/*** 根据用户名模糊查询用户* * param username* return*/ListUser queryUserByUsername(String username);/*** 添加用户* * param user*/void saveUser(User user);
}方式一配置mapper代理
在applicationContext.xml添加配置 MapperFactoryBean也是属于mybatis-spring整合包
!-- Mapper代理的方式开发方式一配置Mapper代理对象 --
bean iduserMapper classorg.mybatis.spring.mapper.MapperFactoryBean!-- 配置Mapper接口 --property namemapperInterface valuecn.itcast.mybatis.mapper.UserMapper /!-- 配置sqlSessionFactory --property namesqlSessionFactory refsqlSessionFactory /
/bean测试方法
public class UserMapperTest {private ApplicationContext context;Beforepublic void setUp() throws Exception {this.context new ClassPathXmlApplicationContext(classpath:applicationContext.xml);}Testpublic void testQueryUserById() {// 获取MapperUserMapper userMapper this.context.getBean(UserMapper.class);User user userMapper.queryUserById(1);System.out.println(user);}Testpublic void testQueryUserByUsername() {// 获取MapperUserMapper userMapper this.context.getBean(UserMapper.class);ListUser list userMapper.queryUserByUsername(张);for (User user : list) {System.out.println(user);}}Testpublic void testSaveUser() {// 获取MapperUserMapper userMapper this.context.getBean(UserMapper.class);User user new User();user.setUsername(曹操);user.setSex(1);user.setBirthday(new Date());user.setAddress(三国);userMapper.saveUser(user);System.out.println(user);}
}方式二扫描包形式配置mapper
!-- Mapper代理的方式开发方式二扫描包方式配置代理 --
bean classorg.mybatis.spring.mapper.MapperScannerConfigurer!-- 配置Mapper接口 --property namebasePackage valuecn.itcast.mybatis.mapper /
/bean每个mapper代理对象的id就是类名首字母小写
练习代码保存
applicationContext.xml
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:contexthttp://www.springframework.org/schema/context xmlns:phttp://www.springframework.org/schema/pxmlns:aophttp://www.springframework.org/schema/aop xmlns:txhttp://www.springframework.org/schema/txxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://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.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd!-- 加载配置文件 --context:property-placeholder locationclasspath:db.properties /context:component-scan base-packagecom.itcast.dao/context:component-scan!-- 数据库连接池 --bean iddataSource classorg.apache.commons.dbcp.BasicDataSourcedestroy-methodcloseproperty namedriverClassName value${jdbc.driver} /property nameurl value${jdbc.url} /property nameusername value${jdbc.username} /property namepassword value${jdbc.password} /property namemaxActive value10 /property namemaxIdle value5 //bean!-- 配置SqlSessionFactory --bean namesqlSessionFactory classorg.mybatis.spring.SqlSessionFactoryBean!-- 配置mybatis核心配置文件 --property nameconfigLocation valueclasspath:SqlMapConfig.xml /!-- 依赖注入 -配置数据源 --property namedataSource refdataSource //bean!-- 原始DAO开发 配置UserDaoImpl --bean nameuserDao classcom.itcast.dao.UserDaoImpl!-- 配置sqlSessionFactory --property namesqlSessionFactory refsqlSessionFactory/property/bean!-- mybatis中mapper动态代理 --!-- bean namemapperFactoryBean classorg.mybatis.spring.mapper.MapperFactoryBeanproperty namesqlSessionFactory refsqlSessionFactory/propertyproperty namemapperInterface valuecom.itcast.mapper.mapper //bean --!-- 增强版mapper动态代理 --bean classorg.mybatis.spring.mapper.MapperScannerConfigurer!-- 此时不需要写得到sqlSessionFactory因为sqlsessionfactory配置在spring容器当中它自动会去找 --property namebasePackage valuecom.itcast.mapper/property/bean
/beansmapper动态代理代码
SqlMapConfig.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configuration
PUBLIC -//mybatis.org//DTD Config 3.0//EN
http://mybatis.org/dtd/mybatis-3-config.dtd
configuration!-- 设置别名 --typeAliases!-- 2. 指定扫描包会把包内所有的类都设置别名别名的名称就是类名大小写不敏感 --package namecom.itcast.dao //typeAliasesmappersmapper resourceUserMapper.xml/!-- 当DAO用传统的DAO开发的时候不能用其他的方式导入mapper.xml文件只能用package --package namecom.itcast.mapper//mappers
/configurationmapper.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapper
PUBLIC -//mybatis.org//DTD Mapper 3.0//EN
http://mybatis.org/dtd/mybatis-3-mapper.dtdmapper namespacecom.itcast.mapper.mapper!-- 通过ID查询一个用户 --select idqueryUserById parameterTypeInteger resultTypecom.itcast.pojo.User!-- include refidselector/include --select * from user where id #{id}/select
/mapper
mapper.java
package com.itcast.mapper1;import com.itcast.pojo1.User;public interface mapper {public User queryUserById(Integer id);
}原始DAO开发方式代码
UserDao.java
package com.itcast.dao;import com.itcast.pojo1.User;public interface UserDao {public User queryUserById(Integer id);public Integer countUser();
}UserDaoImpl.java
package com.itcast.dao;import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.support.SqlSessionDaoSupport;import com.itcast.pojo1.User;public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {Overridepublic User queryUserById(Integer id) {SqlSession session super.getSqlSession();User user session.selectOne(queryUserById, id);return user;}Overridepublic Integer countUser() {SqlSession session super.getSqlSession();Integer s session.selectOne(countUser);return s;}
}测试类
package com.itcast.test;import javax.annotation.Resource;import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.itcast.dao.UserDao;
import com.itcast.mapper1.mapper;
import com.itcast.pojo1.User;
/*RunWith(SpringJUnit4ClassRunner.class)
ContextConfiguration(classpath:applicationContext.xml)*/
public class TestUserDaoDemo1 {Resource(nameuserDao)public UserDao userDao;private ApplicationContext context;/*传统DAO开发方式*/Testpublic void testDemo() {this.context new ClassPathXmlApplicationContext(classpath:applicationContext.xml);UserDao userDao (UserDao) context.getBean(userDao);User user userDao.queryUserById(1);System.out.println(user);}/*mapper动态代理不需要写实现类只需要写接口即可*/Testpublic void testDemo1() {this.context new ClassPathXmlApplicationContext(classpath:applicationContext.xml);UserDao userDao (UserDao) context.getBean(userDao);Integer s userDao.countUser();System.out.println(s);}/*mapper动态代理增强版解决了上述方式中多个mapper文件都需要手动导入*/Testpublic void testDemo2() {this.context new ClassPathXmlApplicationContext(classpath:applicationContext.xml);/*有两种方式可以加载mapper 通过文件名字或者是mapper.class*/mapper bean (mapper) context.getBean(mapper);User user bean.queryUserById(1);System.out.println(user);}
}