MyBatis简介
1.mybatis是一款优秀的持久层框架
2.它支持定制化SQL、存储过程以及高级映射
3.Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集
4.Mybatis可以使用简单的XML或者注解来配置或者映射原生类型、接口和Java的pojo为数据库记录的记录
5.Mybatis是Apache的一个开源项目iBatis,2010年这个项目由Apache 迁移到google,并且改名为Mybatis
6.2013年11月迁移到Github
1.编写一个Mybatis程序
1.搭建环境
2.创建一个模板
3 编写mybatis工具类
//SqlSessionFactory -->SqlSession public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { String resource = "org/mybatis/example/mybatis-config.xml"; try {//使用mybatis的第一步:获取SqlSessionFactory对象 InputStream resourceAsStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); } catch (IOException e) { e.printStackTrace(); } } //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。 // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。 public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
4.编写代码
·实体类
·dao接口
public interface UserDao { List<User> getUserList(); }
·接口实现类:原来的 UserDaoImpl转变为Mapper配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--namespace=绑定一个对应的Dao/Mapper接口--> <mapper namespace="com.pl.dao.UserDao"> <!--select 查询语句 --> <select id="getUserList" resultType="com.pl.pojo.User"> select * from mybatis.user </select> </mapper>
5.测试
注意点:org.apache.ibatis.binding.BindingException: Type interface com.pl.dao.UserDao is not known to the MapperRegistry. 解决:
<!--每一个Mapper.xml都需要在Mybatis的核心配置文件中注册--> <mappers> <mapper resource="UserMapper.xml"/> </mappers>
.junit测试
public class UserDaoTest { @Test public void test(){ //第一步:获取SQLSession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //第二步:执行SQL UserDao mapper = sqlSession.getMapper(UserDao.class); List<User> userList = mapper.getUserList(); for (User user:userList) { System.out.println(user); } //关闭sqlsession sqlSession.close(); } }
2.增删改查的实现(CRUD)
1、namespace
namespace中的包名要和Dao/Mapper接口的包名一致!
2、select
选择,查询语句
3、insert
4、update
5、delete
·id:就是对应的namespace中的方法名;
·resultType:SQL语句中执行的返回值!
·parameterType:参数类型!
1.编写接口
//根据id查询用户 User getUserById(int id);
2.编写对应的SQL语句
<select id="getUserById" resultType="com.pl.pojo.User" parameterType="int"> select *from mybatis.user where id = #{id} </select>
3.测试
@Test public void getUserById(){ //第一步:获取SQLSession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //第二步:执行SQL UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.getUserById(1); System.out.println(user); //关闭sqlsession sqlSession.close(); }
4.如果使增删改则需要提交事务
//提交事务 sqlSession.commit();
6、拓展
Map传递参数。可直接在SQL中取key即可 【parameterType="map"】; 对象传递参数,直接在sql中取对象的属性即可 【parameterType="object"】; 只有一个基本类型参数的情况下,可直接在SQL中取到,多个参数用Map或者注解
3. 配置解析
1、核心配置文件
·mybatis-config.xml ·MyBatis的配置文件包含了会深深影响Mybatis行为的设置和属性信息
configuration(配置) properties(属性) settings(设置) typeAliases(类型别名) typeHandlers(类型处理器) objectFactory(对象工厂) plugins(插件) environments(环境配置) environment(环境变量)