什么是MyBatis
MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录.
MyBatis操作数据库
1、创建MyBatis全局配置文件
configuration 配置
• properties 属性
• settings 设置
• typeAliases 类型命名
• typeHandlers 类型处理器
• objectFactory 对象工厂
• plugins 插件
• environments 环境
• environment 环境变量
• transactionManager 事务管理器
• dataSource 数据源
• databaseIdProvider 数据库厂商标识
• mappers 映射器
2、创建SQL映射文件
映射文件指导着MyBatis如何进行数据库增删改查
Employee
EmployeeMapper.java为Dao接口文件
编写EmployeeMapper.xml实现接口Dao中的sql语句
增删改查:
<mapper namespace="com.atguigu.mybatis.dao.EmployeeMapper">
<select id="getEmpByLastNameLikeReturnMap" resultType="com.atguigu.mybatis.bean.Employee">
select * from tbl_employee where last_name like #{lastName}
</select>
<insert id="addEmp" parameterType="com.atguigu.mybatis.bean.Employee" useGenerateKeys="true" KeyProperty="id">
insert into tbl_employee(last_name,email,gender)
values(#{lastname},#{email},#{gender})
</insert>
<update id="updateEmp">
update tbl_employee
set last_name=#{lastName},email=#{email},gender=#{gender}
where id=#{id}
</update>
<!-- public void deleteEmpById(Integer id); -->
<delete id="deleteEmpById">
delete from tbl_employee where id=#{id}
</delete>
测试:
1、根据全局配置文件,利用
SqlSessionFactoryBuilder创建SqlSessionFactory
String resource="mybatis-config.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(inputStream);
2、使用SqlSessionFactory获取sqlSession对象。一个SqlSession对象代表和数据库的一次会话。
SqlSession sqlSession=factory.openSession();//需要手动提交,设为true则自动提交
用SqlSession获取映射器
EmployeeMapper mapper=sqlSession.getMapper(EmployeeMapper.class);
Employee employee=mapper.getEmpById(1);
测试增删改
* 1、mybatis允许增删改直接定义以下类型返回值
* Integer、Long、Boolean、void
* 2、我们需要手动提交数据
* sqlSessionFactory.openSession();===》手动提交
* sqlSessionFactory.openSession(true);===》自动提交
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
//1、获取到的SqlSession不会自动提交数据
SqlSession openSession = sqlSessionFactory.openSession();
try{
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
//测试添加
Employee employee = new Employee(null, "jerry4",null, "1");
mapper.addEmp(employee);
System.out.println(employee.getId());
//测试修改
//Employee employee = new Employee(1, "Tom", "jerry@atguigu.com", "0");
//boolean updateEmp = mapper.updateEmp(employee);
//System.out.println(updateEmp);
//测试删除
//mapper.deleteEmpById(2);
//2、手动提交数据
openSession.commit();
}finally{
openSession.close();
}
}
主键生成:
mysql支持自增主键,也是利用statement.getGeneratedKeys();
useGenerateKeys=“true” KeyProperty=“id”
参数处理:
mybatis怎么处理参数
1、ParamNameResovler解析参数封装map
select查询
如果返回是集合,要写集合中元素的类型
resultType=“com.atguigu.mybatis.bean.employee”
返回一条记录的map,key是列名,值是对应的值
多条记录的map,key是记录的主键,值是对应的记录封装的javabean
resultType=“com.atguigu.mybatis.bean.employee”
resultType自动封装 将select的列名封装置bean的属性
自定义resultMap,实现高级及结果映射
resultmap应用:Employee中有一个属性为部门属性dept
association可以指定联合的javaBean对象,相当于嵌套
association进行分步查询:
可以使用延迟加载:属性按需加载 用的时候再加载
association场景二:查询部门的时候将部门对应的所有员工信息也查询出来
collection用于分段查询
动态sql
总结自尚硅谷MyBatis资料