MybatisConfig.xml
mappers映射文件
typeAliases:
package将类名简写
typeAliases标签
type属性:指定给哪个类起别名 alias属性:别名
接口方法
public interface BrandMapper {
/**
* 查询所有
*/
List selectAll();
/**
*多条件查询
*/
List selectByCondition(@Param("status") int status, @Param("companyName")
String companyName,@Param("brandName") String brandName);
/**
* 添加
*/
void add(Brand brand);
/**
* 修改
*/
void update(Brand brand);
/**
* 根据id删除
*/
void deleteById(int id);
/**
* 批量删除
*/
void deleteByIds(int[] ids);
}
单条件sql语句
resultMap:将_命名的变量转化为驼峰命名
insert into tb_brand (brand_name, company_name, ordered, description, status)
values (#{brandName}, #{companyName}, #{ordered}, #{description}, #{status});
update tb_brand
brand_name = #{brandName},
company_name = #{companyName},
ordered = #{ordered},
description = #{description},
status = #{status}
where id = #{id};
delete from tb_brand where id = #{id};
delete from tb_brand where id
in
#{id}
;
多条件查询
①使用 @Param("参数名称")
标记每一个参数,映射配置文件中就需要使用 #{参数名称}
进行占位
List selectByCondition(@Param("status") int status, @Param("companyName") String companyName,@Param("brandName") String brandName);
②将多个参数封装成一个 实体对象 ,将该实体对象作为接口的方法参数。该方式要求在映射配置文件的SQL中使用 #{内容}
时,里面的内容必须和实体类属性名保持一致。
List selectByCondition(Brand brand);
③将多个参数封装到map集合中,将map集合作为接口的方法参数。该方式要求在映射配置文件的SQL中使用 #{内容}
时,里面的内容必须和map集合中键的名称一致。
List selectByCondition(Map map);
动态sql
select * from tb_brand where status = ? and company_name like ? and brand_name like ?
test 属性:逻辑表达式 以及
foreach 标签
用来迭代任何可迭代的对象(如数组,集合)。
collection 属性:
mybatis会将数组参数,封装为一个Map集合。
默认:array = 数组
使用@Param注解改变map集合的默认key的名称
item 属性:本次迭代获取到的元素。
separator 属性:集合项迭代之间的分隔符。foreach
标签不会错误地添加多余的分隔符。也就是最后一次迭代不会加分隔符。
open 属性:该属性值是在拼接SQL语句之前拼接的语句,只会拼接一次
close 属性:该属性值是在拼接SQL语句拼接后拼接的语句,只会拼接一次
delete from tb_brand where id
in
#{id}
;
注意:
编写接口方法:当有多个条件时
使用 @Param("参数名称")
标记每一个参数,在映射配置文件中就需要使用 #{参数名称}
进行占位
将多个参数封装成一个 实体对象 ,将该实体对象作为接口的方法参数。该方式要求在映射配置文件的SQL中使用 #{内容}
时,里面的内容必须和实体类属性名保持一致。
将多个参数封装到map集合中,将map集合作为接口的方法参数。该方式要求在映射配置文件的SQL中使用 #{内容}
时,里面的内容必须和map集合中键的名称一致。
注解实现CRUD
查询 :@Select
//根据id查询
@Select(value = "select * from tb_user where id = #{id}")
public User select(int id);
//查询所有
@Select(value = "select * from tb_user")
public List select();
添加 :@Insert
//添加操作
@Insert("insert into tb_brand values(null,#{brandName},#{companyName},#{ordered},#{description},#{status})")
void add(Brand brand);
修改 :@Update
//更新操作
@Update("update tb_brand set brand_name = #{brandName}, company_name = #{companyName},ordered = #{ordered},description = #{description},status = #{status},where id = #{id};")
void update(Brand brand);
删除 :@Delete
@Delete("delete * from tb_brand where id = #{id}")
void delete(Integer id);
在pom中添加逆向工程插件
org.mybatis.generator
mybatis-generator-maven-plugin
1.4.1
true
mysql
mysql-connector-java
8.0.30
配置generatorConfig.xml
测试
@Test
public void testSelectByPrimaryKey(){
SqlSession sqlSession = factory.openSession();
BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
Brand brand = mapper.selectByPrimaryKey(1);
System.out.println(brand);
sqlSession.close();
}
@Test
public void testSelectByExample(){
SqlSession sqlSession = factory.openSession();
BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
List brands = mapper.selectByExample(null);
brands.forEach(brand -> System.out.println(brand));
sqlSession.close();
}
//写到mybatis-config.xml
logback依赖
ch.qos.logback
logback-classic
1.2.11
test
logback.xml
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log
30
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
100MB
MyBatis分页查询
mybatis-config.xml 注:放在typeAliases的下面
导入依赖
com.github.pagehelper
pagehelper
5.3.1
测试类
@Test
public void testSelectAll(){
SqlSession sqlSession = factory.openSession();
BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
int pageNum = 1;
int pageSize = 2;
PageHelper.startPage(pageNum,pageSize);
List brands = mapper.selectAll();
brands.forEach(brand -> System.out.println(brand));
}
sql语句:select * from tableName ...... limit (pageNum - 1) * pageSize, pageSize
mapper接口
/**
* 通过分页的方式获取Brand列表
* @param startIndex 页码
* @param pageSize 每页显示记录条数
* @return
*/
List selectAllByPage(@Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize);
mapper.xml
测试类
public class PageTest {
@Test
public void testPage()throws Exception{
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession();
CarMapper mapper = sqlSession.getMapper(CarMapper.class);
// 页码
Integer pageNum = 2;
// 每页显示记录条数
Integer pageSize = 3;
// 起始下标
Integer startIndex = (pageNum - 1) * pageSize;
List brands= mapper.selectAllByPage(startIndex, pageSize);
brands.forEach(car -> System.out.println(brand));
sqlSession.commit();
sqlSession.close();
}
}