一、介绍
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); }
有不正确或者不足之处,欢迎大家留言指正