一、介绍
MyBatis是一个基于Java的持久层半自动ORM框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJO类,映射成数据库中的记录。
二、特点
1、轻量级。没有任何第三方依赖,最简单安装只需要两个jar文件+几个mapper映射文件。
三、核心
1、动态SQL
where标签能够自动为sql语句添加where关键字。同时自动去掉其中第一个if语句中的开头and关键字
<where>
<if test="">and sql1</if>
<if test="">and sql2</if>
</where>
2、输入输出映射
<resultMap>
<id cloumn="user_name" property="userName" />
<result cloumn="password" property="password" />
<!--输出类中的一个集合属性-->
<collection property="userList" javaType="list">
</collection>
<!--输出类中的一个对象属性-->
<association property="car" javaType="com.Car">
</association>
</resultMap>
四、使用步骤
dao实现类方式
1.创建SqlSessionFactory
2.获取SqlSession
3.通过SqlSession执行数据库操作
4.释放资源
@Override
public List<User> findUserByUserName(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<User> 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映射文件包扫描
<!-- 加载db属性文件 -->
<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>
<!-- 指定mybatis核心配置文件 -->
<property name="configLocation" value="classpath:SqlMapConfig.xml"></property>
</bean>
<!-- 配置mapper -->
<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);
}
有不正确或者不足之处,欢迎大家留言指正