- Mybatis 进阶
- 1.核心配置文件
- 1.1.properties读取外部文件
- 1.2. alias别名
- 1.3. settings
- 1.4.其他配置(了解)
- 1.5.映射文件mappers
- 1.6. resultMap结果集映射
- 2.日志
- 2.1.日志工厂
- 2.2.手动配置日志
- 2.3.使用 log4j
- 2.3.1.导包
- 2.3.2.创建log4j.properties
- 2.3.4.测试日志
- 3.分页
- **3.1.limit 分页**
- 3.2. RowBounds实现分页
- 3.3. pagehelper分页插件
- 4.注解开发
网站: https://mybatis.org/mybatis-3/zh/configuration.html
能够配置的
每一个标签都有自己的位置,必须按照规定好的顺序
1.1.properties读取外部文件核心配置文件引入db.properties文件
db.properties文件
注意:properties 不需要转义
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/dawenxi?useSSL=false&useUnicode=true&characterEncoding=utf-8&autoReconnect=true username=root password=Gm_199610
dataSource标签
附:
1.2. alias别名
通过包
通过类型
通过注解
@Data
@NoArgsConstructor
@AllArgsConstructor
@Alias("Hello")
public class User {
private int id;
private String username;
private String password;
}
1.3. settings
settings是 mybatis中及其重要的,它会改变 mybatis的运行时行为。也就是 多写,少写,写错会报错。
1.4.其他配置(了解)- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件) – mybatis -plus,通用mapper
注册我们的mapper文件。
方式一:resource (推荐)
mapper.xml可以在任何位置存放
方式二 :class
mapper.xml只能放在接口下边
注意:
接口必须和Mapper配置文件同名
Mapper配置文件必须放在接口同一包下
方式三:package
注意:
接口必须和Mapper配置文件同名
Mapper配置文件必须放在接口同一包下
1.6. resultMap结果集映射2.日志select * from `user`
如果项目出问题了,怎么排错?
可以debug,或者使用日志
2.1.日志工厂SLF4J
LOG4J 掌握
LOG4J2
JDK_LOGGING
COMMONS_LOGGING
STDOUT_LOGGING 默认的,拿来就能用
NO_LOGGING 掌握
在mybatis 中具体使用哪一个日志,在settings中设置。
2.2.手动配置日志使用STDOUT_LOGGING 默认的,拿来就能用
第一步:在核心配置文件中配置
2.3.使用 log4j
百度:
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,
我们也可以控制每一条日志的输出格式(意味着我们可以改变我们的sout)。
通过定义每一条日志信息的级别(debug,警告,错误…)
这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
2.3.1.导包2.3.2.创建log4j.propertieslog4j log4j 1.2.17
#日志配置
log4j.rootLogger = DEBUG,stdout,file
#控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[ %p ]%m%n
#所有文件输出
log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.File =自己日志文件地址
log4j.appender.file.Encoding=UTF-8
log4j.appender.file.name = fileLogDemo
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c {Num}] [%l] [ %t:%r ] - [ %p ] %m%n
log4j.appender.file.append = true
2.3.3.导入到核心配置文件
2.3.4.测试日志
@org.junit.Test
public void log4jTest(){
logger.info("info:进入了log4jTest方法");
logger.debug("debug:进入了log4jTest方法");
logger.error("error:进入了log4jTest方法");
}
3.分页
数据量大的时候,为了减少数据的查找量 分页
SELECT * FROM `user` LIMIT 4; -- 从0开始,到第四位
SELECt * FROM `user` LIMIT 0,2; -- 每一页显示两个,从第一位开始查 0是下标
使用mybatis来实现分页,实际上就是操作sql
3.1.limit 分页接口
// 分页 public ListqueryLimit(Map map);
mapper.xml
select * from `user` limit #{startIndex},#{pageSize};
test
@org.junit.Test
public void queryLimit(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Map map = new HashMap<>();
map.put("startIndex",0);
map.put("pageSize",5);
List userList = userMapper.queryLimit(map);
for (User user : userList) {
logger.info(user);
}
sqlSession.close();
}
3.2. RowBounds实现分页
接口
// 分页RowBounds public ListqueryRowBounds();
mapper.xml
test
@org.junit.Test
public void queryRowBounds(){
RowBounds rowBounds = new RowBounds(0, 5);
SqlSession sqlSession = MybatisUtils.getSqlSession();
List userList = sqlSession.selectList("com.gm.mapper.UserMapper.queryRowBounds", null, rowBounds);
for (User user : userList) {
logger.info(user);
}
sqlSession.close();
}
3.3. pagehelper分页插件
知道有这个东西
4.注解开发查询
接口
// 查询用户根据多个参数
@Select("select * from user WHERe username =#{uname} AND `password`=#{pwd};")
public List queryUser(@Param("pwd") String password, @Param("uname") String username);
测试
@org.junit.Test
public void queryUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List UserList = userMapper.queryUser("123456", "如花");
for (User user : UserList) {
System.out.println(user);
}
sqlSession.close();
}
修改
接口
// 修改用户
@Update("update user set username=#{username},password=#{password} where id=#{id}")
int updUser(User user);
测试
@org.junit.Test
public void updUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.updUser(new User(18,"张三","123456789"));
sqlSession.commit();
sqlSession.close();
}
新增
接口
// 新增用户
@Insert("insert into user(id,username,password) values (#{id},#{username},#{password})")
public int addUser(User user);
测试
@org.junit.Test
public void addUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int i = userMapper.addUser(new User(18, "如花", "123456"));
if (i>0){
System.out.println("新增成功");
}
sqlSession.commit();
sqlSession.close();
}
删除
接口
// 删除用户
@Delete("delete from user where id =#{uid}")
int delUser(@Param("uid") int id);
测试
@org.junit.Test
public void delUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int i = userMapper.delUser(18);
if (i>0){
System.out.println("删除成功");
}
sqlSession.commit();
sqlSession.close();
}



