文章目录
狂神说MyBatis01:第一个程序
持久层框架
避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
使用简单的 XML 或注解来配置和映射
狂神说MyBatis02:CRUD操作及配置解析
配置文件中namespace中的名称为对应Mapper接口或者Dao接口的完整包名,必须一致!
mapper是一个接口类
public interface UserMapper { List<User> selectUser(); }
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">
<mapper namespace="com.kuang.dao.UserMapper">
<select id="selectUser" resultType="com.kuang.pojo.User">
select * from user
</select>
</mapper>
先编写接口方法;
//修改一个用户
int updateUser(User user);
在xml文件中写入sql语句
<update id="updateUser" parameterType="com.kuang.pojo.User">
update user set name=#{name},pwd=#{pwd} where id = #{id}
</update>
测试
@Test
public void testUpdateUser() {
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUserById(1);
user.setPwd("asdfgh");
int i = mapper.updateUser(user);
System.out.println(i);
session.commit(); //提交事务,重点!不写的话不会提交到数据库
session.close();
}
- 所有的增删改操作都需要提交事务!
- 接口所有的普通参数,尽量都写上@Param参数,尤其是多个参数时,必须写上!
- 有时候根据业务的需求,可以考虑使用map传递参数!
- 为了规范操作,在SQL的配置文件中,我们尽量将Parameter参数和resultType都写上!
模糊查询like语句如何写
配置解析
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
<!-- 注意元素节点的顺序!顺序不对会报错 -->
mappers元素
xml映射器与接口映射器
Properties优化
typeAliases优化
作用域(Scope)和生命周期
狂神说MyBatis03:ResultMap及分页
java类中密码为password,数据中为pwd,名称不同
select * from user where id = #{id} 可以看做
select id,name,pwd from user where id = #{id}
//mybatis会根据这些查询的列名(会将列名转化为小写,数据库不区分大小写) , 去对应的实体类中查找相应列名的set方法设值 , 由于找不到setPwd() , 所以password返回null ; 【自动映射】
解决方法
- 为列名指定别名 , 别名和java实体类的属性名一致
- 使用结果集映射->ResultMap 【推荐】
<select id="selectUserById" resultType="User">
select id , name , pwd as password from user where id = #{id}
</select>
ResultMap
自动映射
手动映射
数据库中,存在一对多,多对一的情况,我们之后会使用到一些高级的结果集映射,association,collection这些,我们将在之后讲解
日志工厂
分页:limit实现分页(SQL层面)
狂神说MyBatis04:使用注解开发
mybatis最初配置信息是基于 XML ,映射语句(SQL)也是定义在 XML 中的。而到MyBatis 3提供了新的基于注解的配置。不幸的是,Java 注解的的表达力和灵活性十分有限。最强大的 MyBatis 映射并不能用注解来构建
sql 类型主要分成 :
- @select ()
- @update ()
- @Insert ()
- @delete ()
**注意:**利用注解开发就不需要mapper.xml映射文件了 .
关于@Param@Param注解用于给方法参数起一个名字
在方法只接受一个参数的情况下,可以不使用@Param。
在方法接受多个参数的情况下,建议一定要使用@Param注解给参数命名。
如果参数是 JavaBean , 则不能使用@Param。
不使用@Param注解时,参数只能有一个,并且是Javabean
#与$的区别
使用注解和配置文件协同开发,才是MyBatis的最佳实践!