MyBatis要点总结
一、介绍
MyBatis是一个基于Java的持久层半自动ORM框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJO类,映射成数据库中的记录。
二、特点
1、轻量级。没有任何第三方依赖,最简单安装只需要两个jar文件+几个mapper映射文件。
三、核心
1、动态SQL
where标签能够自动为sql语句添加where关键字。同时自动去掉其中第一个if语句中的开头and关键字
2、输入输出映射
四、使用步骤
dao实现类方式
1.创建SqlSessionFactory
2.获取SqlSession
3.通过SqlSession执行数据库操作
4.释放资源
@Override public ListfindUserByUserName(String userName) throws Exception { //1.创建SqlSessionFactory工厂 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(Resources.getResourceAsReader("SqlMapConfig.xml")); //2.获取SqlSession SqlSession session = sf.openSession(); //选择要执行的id(已在映射文件中写好) String statedmentId = "test.findUserByUserName"; //3.通过SqlSession执行数据库操作 List list = session.selectList(statedmentId,userName); //4.释放资源 session.close(); //返回结果 return list; }
dao接口方式
* 前提:1)接口和映射文件在同一包下 2)接口和映射文件名字相同 3)映射文件的名称空间必须是对应接口的全类名
同包同名
名称空间对应
1.创建SqlSessionFactory
2.获取SqlSession
3.获取动态代理对象
4.通过代理对象执行数据库操作
5.释放资源
@Override public int userRegister(User user) throws Exception { //1.创建SqlSessionFactory工厂 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(Resources.getResourceAsReader("SqlMapConfig.xml")); //2.获取SqlSession SqlSession session = sqlSessionFactory.openSession(); //3.获取动态代理对象 UserMapper mapper = session.getMapper(UserMapper.class); //4.执行接口中的方法--即映射文件中的SQL操作 mapper.getOne(user); //5.释放资源 session.close(); return 0; }
总是频繁的创建工厂,获取session是非常消耗资源的。所以我们选择将这个创建过程交给spring容器去管理。下面开始整合
四、Spring整合Mybatis
在spring核心配置文件中添加如下配置:
1.配置数据源
2.配置MyBatis会话工厂
3.配置mapper映射文件包扫描
<context:property-placeholder location="classpath:db.propertis"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="maxActive" value="20"/>
<property name="maxIdle" value="5"/>
bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource">property>
<property name="configLocation" value="classpath:SqlMapConfig.xml">property>
bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.hpe.dao">property>
bean>
完整的整合,事务的配置是单独的一个配置文件,这里也可以暂时不做配置
4.配置事务管理器
5.添加事务注解驱动--(这里只配置简单的注解方式的事务,还有AOP方式的事务管理)
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource">property>
bean>
<tx:annotation-driven/>
至此,Spring整合MyBatis完毕。通过在Service层中使用@Autowired注解注入即可。(属性名,必须是接口名的开头变小写的格式)
@Autowired private UserMapper userMapper; /** * * 使用该对象,调用接口中定义的方法。得到数据 * */ @Override public User login(User user) { return userMapper.getUserByLogin(user); }
有不正确或者不足之处,欢迎大家留言指正