接上篇MyBatis快速入门
目的:解决原生方式中的硬编码,简化后期执行sql
在mapper中定义方法,方法名就是sql映射文件中的sql语句的id并保存参数类型和返回值一致
配置数据库连接环境信息,可以配置多个environment,通过default属性切换不同的environment
三步:编写接口方法,编写sql,执行方法
在xml中使用resultmap来编写sql
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.BrandMapper">
<resultMap id="select_all" type="com.itheima.pojo.Brand">
<result column="brand_name" property="brandName"/>
<result column="company_name" property="companyName"/>
resultMap>
<select id="selectAll" resultMap="select_all">
select *
from tb_brand;
select>
mapper>
步骤:
和上面一样,只是有参数而已,而且参数是行id(int)
特殊字符处理,如“<”,可以用CDTATA区
也可以用转义字符(与web相同:<
即<
)
书写sql时可以采用switch case模式
<select id="selectByConditionSingle" resultMap="differences">
select *
from tb_brand
<where>
<choose>
<when test="status!=null">
status=#{status}
when>
<when test="companyName!=null and companyName!=''">
company_name like #{companyName}
when>
<when test="brandName!=null and brandName!=''">
brand_name like #{brandName}
when>
choose>
where>
select>
但是要单条件查询的话注解就不是很好用了,所有需要采用封装
在接口里写入
List
然后到Test文件里封装对象
Brand brand = new Brand();
brand.setStatus(status);
brand.setCompanyName(companyName);
brand.setBrandName(brandName);
然后修改执行方法
List
System.out.println(condition);
即可输出
void add(Brand brand);
<insert id="add">
insert into tb_brand (brand_name, company_name, ordered, description, status)
values (#{brandName}, #{companyName}, #{ordered}, #{description}, #{status});
insert>
//4.1.执行方法
brandMapper.add(brand);
//4.2.提交事务
sqlSession.commit();//手动提交事务
也可以在第二步默认开事务
SqlSession sqlSession = sqlSessionFactory.openSession(true);
有时候需要在提交后收到添加字段的id值,这时候可以在xml里给sql语句添加两个属性:useGeneratedKeys="true" keyProperty="id"
然后再在调用方法后面输出id即可
比如用户只是修改其中部分,我们就要用动态sql
和前面查询的动态sql类似,我们也用
替代set
并添加
来判断条件
老样子
<delete id="deleteById">
delete
from tb_brand
where id = #{id};
delete>