01-mybatis的dao层实现-传统实现方式
dao层的实现类写了哪些代码?
02-mybatis的dao层实现-接口代理方式实现规范
mapper.xml中namespace的值有什么要求?
必须是接口的全路径名称;
mapper.xml中 select标签的id值有什么要求?
必须是对应的接口中的方法名
mapper.xml中 select标签的parameterType值有什么要求?
必须是对应的接口中方法的参数类型
mapper.xml中 select标签的resultType值有什么要求?
必须是对应的接口中方法的返回值类型
03-mybatis的dao层实现-接口代理方式代码实现
如何获取到dao接口的动态代理对象?
04-mybatis的dao层实现-知识小结
以前:
1.定义接口;
2.编写实现类,重写方法;
现在:
1.定义接口;
2.编写映射配置文件;
映射配置文件中的内容需要和对应的接口一一对应;
在核心配置文件中引入映射配置文件:
<mapper resource="com/itheima/mapper/UserMapper.xml"></mapper>
在核心配置文件中引入dao层的接口:
<mapper class="com.itheima.mapper.UserMapper"/>
当mybatis找到对应的接口后,会自动去该接口所在的目录下,查找跟接口名一模一样的映射配置文件;
注意:
映射配置文件的名字需要和对应的接口的名字一样;
映射配置文件的路径需要和对应的接口的路径一样;
<package name="com.itheima.mapper"/>
mybatis扫描指定的包,然后得到该包下所有的接口,并且会自动去该接口所在的目录下,查找跟接口名一模一样的映射配置文件;
05-mybatis映射文件深入-动态sql概述和环境搭建
为什么会有动态sql的出现?
客户的需求不确定
06-mybatis映射文件深入-动态sql-if
如何判断User参数的某个属性条件是否存在?
标签+标签
标签的作用
替换where关键字,智能的进行sql拼接
***************************
1.如果一个条件都没有,则最终生成的sql语句中没有where关键字
2.如果有条件,则会把第一个条件的and去掉;
select * from user and id = #{id} and username = #{username} and password = #{password} 07-mybatis映射文件深入-动态sql-foreach(了解) collection属性什么意思? 当前遍历的是那种类型的容器 item属性什么意思? 从容器中遍历出的每一个元素的临时变量名; open属性什么意思? 动态sql的内容是以什么内容开始; close属性什么意思? 动态sql的内容是以什么内容结束 seprator属性什么意思? 分隔符
08-mybatis映射文件深入-动态sql-sql片段的抽取
如何定义公用的sql语句?
select * from user
如何引用公用的sql语句?
09-mybatis映射文件深入-动态sql-知识小结
:插入
:修改
:删除
:where条件
:if判断
:循环
:sql片段抽取
10-mybatis核心配置文件深入-typeHandler概述
类型转换器有什么作用?
把java类型和数据库的类型进行相互转换
mybatis已经提供了很多常用的类型转换器;但是,有可能不能满足我们全部业务需求;
11-mybatis核心配置文件深入-typeHandler测试环境搭建
为什么往数据库添加User对象时会失败?
java对象的数据名和数据库中的属性字段没有一 一对应
12-mybatis核心配置文件深入-自定义DateTypeHandler实现
1.自定义类继承BaseTypeHandler类,重写方法;
2.在配置文件中配置;
public class DateAndLongHandler extends BaseTypeHandler {
// 把java类型的数据转换为数据库需要的类型数据
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Date parameter, JdbcType jdbcType) throws SQLException {
// 将时间转为毫秒值
long time = parameter.getTime();
// 设置指定位置的值为指定的毫秒值, 实现date日期与long类型的毫秒值的转换
ps.setLong(i,time);
}
// 把数据库中的long类型数据转为java类型的date类型 根据字段的名称
@Override
public Date getNullableResult(ResultSet rs, String columnName) throws SQLException {
Date date = new Date(rs.getLong(columnName));
return date;
}
// 根据字段的顺序
@Override
public Date getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
Date date = new Date(rs.getLong(columnIndex));
return date;
}
// 根据
@Override
public Date getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
java.sql.Date date = cs.getDate(columnIndex);
return date;
}
}
<!--配置自定义的类型转换器-->
13-mybatis核心配置文件深入-plugins标签介绍和查询全部代码编写 为什么要是用分页插件? 方便
14-mybatis核心配置文件深入-plugins分页助手的代码实现
如何配置pagehelper插件?
如何设置分页限定条件?
// 设置分页的条件 在执行查询之前 设置当前页,以及每页的个数
PageHelper.startPage(1,3);
*****************
1.导入分页插件坐标:
pagehelper
2.在核心配置文件中:
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="你当前操作的是什么数据库"></property>
</plugin>
</plugins>
3.在查询代码执行之前:设置分页限定条件
PageHelper.startPage(当前页码,每页条数);
15-mybatis核心配置文件深入-plugins分页助手的分页相关数据获取
当分页查询完毕后,如何获取分页查询的其他结果,如总条数等信息;
根据查询出来的集合对象构建一个PageInfo即可:
PageInfo<User> pageInfo = new PageInfo<User>(查询出来的集合);
16-mybatis核心配置文件深入-知识小结
MyBatis核心配置文件常用标签:
1、properties标签:该标签可以加载外部的properties文件
2、typeAliases标签:设置类型别名
3、environments标签:数据源环境配置标签
4、typeHandlers标签:配置自定义类型处理器
5、plugins标签:配置MyBatis的插件
public class UserServiceDemo {
public static void main(String[] args) throws IOException {
// 加载资源
InputStream is = Resources.getResourceAsStream(“sqlMapConfig.xml”);
// 获取会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
// 获取会话对象
SqlSession sqlSession = sqlSessionFactory.openSession(true);
// 执行操作 获取一个指定接口的动态代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 执行方法
List list = userMapper.findAll();
System.out.println(list);
}
}
mybatis类型转换器
mybatis执行流程