mapper.xml文件
执行流程 1.加载mybatis的核心配置文件,获取SqlSessionFactory1 2 3 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
2.获取SqlSession对象1 SqlSession sqlSession = sqlSessionFactory.openSession();
3.执行sql,返回user列表1 List<User> users = sqlSession.selectList("demo.mapper.UserMapper.selectAll");
4.释放资源
查询 1 2 3 4 5 6 7 8 9 10 11 12 13 <!-- id:完成主键字段的映射 column:表的列名 property:实体类的属性名 result:完成一般字段的映射 column:表的列名 property:实体类的属性名 --> <resultMap id="brandResultMap" type="brand"> <result column="brand_name" property="brandName"/> <result column="company_name" property="companyName"/> </resultMap>
查询所有 1 2 3 4 <select id="selectAll" resultMap="brandResultMap"> select * from tb_brand; </select>
1 List<Brand> selectAll();
查询详情 1 2 3 <select id="selectById" resultType="User"> select * from tb_user where id = #{id}; </select>
条件查询 1 2 3 4 5 6 7 <select id="selectByCondition" resultMap="brandResultMap"> select * from tb_brand where status = #{status} and company_name like #{companyName} <!--模糊查询--> and brand_name like #{brandName} <!--模糊查询--> </select>
1 2 3 4 //@Param意思是将status的值传递给‘status’的占位符 List<Brand> selectByCondition(@Param("status")int status,@Param("companyName")String companyName,@Param("brandName")String brandName); //把参数封装成brand,selectByCondition将自动调用getStatus...用于查询 List<Brand> selectByCondition(Brand brand);
动态条件查询 if:
1 2 3 4 5 6 7 8 9 10 11 12 13 <select id="selectByCondition" resultMap="brandResultMap"> select * from tb_brand where <if test="status != null"> status = #{status} </if> <if test="companyName != null and companyName != '' "> and company_name like #{companyName} <!--模糊查询--> </if> <if test="brandName ! = null and brandName ! = '' "> and brand_name like #{brandName} <!--模糊查询--> </if> </select>
问题:若第一个if不成立
解决:
改进: 使用 自动生成
动态单条件查询
添加 或者可以手动commit
主键返回 1 <insert useGeneratedKeys="true" keyProperty="id">
1 2 3 brandMapper.add(brand); Integer id = brand.getId(); System.out.println(id);
修改 修改全部字段
修改部分字段
删除 删除一个 1 void deleteByid(int id);
1 2 3 <delete id="deleteByid"> delete from tb_brand where id = #{id}; </delete>
删除多个 1 2 3 4 5 <!-- mybatis默认会将数组参数,封装成一个map集合 *默认:array(key) = 数组(value) *使用@Param注解改变map集合的默认key名称 -->
1 void deleteByids(@Param("ids") int[] ids);
<delete id="deleteByids">
delete from tb_brand where id <!--分隔符-->
in <foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
;
</delete>
注解开发 第一种:方法有多个参数,需要 @Param 注解 第二种:方法参数要取别名,需要 @Param 注解 第三种:XML 中的 SQL 使用了 $ ,那么参数中也需要 @Param 注解 第四种,那就是动态 SQL ,如果在动态 SQL 中使用了参数作为变量,那么也需要 @Param 注解,即使你只有一个参数。@Param参考 动态sql参考