下部刚刚是上部
6sql映射文件
常用sql标签
<select id=""></select><insert id=""></insert><update id=""></update><delete id=""></delete>
常用属性
resultType 返回类型通过包名 类名 标记返回值类型 (单条数据的类型)
parameterType 传入参数 可以省略不写要与动态参数标记 #{} 搭配使用
注意: 根据对应关系 指定传入的参数
1传简单数据类型的单个参数 (基本数据类型 字符串)
#{不需要特殊对应 都可以得到 尽量使用形参名}
接口
User getUser2(Integer id);
sql映射
<select id="getUser2" resultType="com.javasm.entity.User">select * from `user` where id = #{id}</select>
测试类
@Testpublic void userSelectDemo2(){ SqlSession sqlSession = MyBatisHealper.getSqlSession();UserDao mapper =sqlSession.getMapper(UserDao.class);User user = mapper.getUser2(2);System.out.println(user);MyBatisHealper.backSqlSession(sqlSession); }
2传对象类型 包含多个参数 (各种实体对象)
#{与对象属性名对应}
接口
User getUser3(User queryUser);
sql映射
<select id="getUser3" resultType="com.javasm.entity.User">select * from `user` where `name` = #{name} and `password` = #{password} </select>
测试类
@Testpublic void userSelectDemo3(){ SqlSession sqlSession = MyBatisHealper.getSqlSession();UserDao mapper =sqlSession.getMapper(UserDao.class);User queryUser = new User("张三", "abc123");User user = mapper.getUser3(queryUser);System.out.println(user);MyBatisHealper.backSqlSession(sqlSession); }
3传map对象 包含多个参数 (直接使用map) 了解即可 不建议使用
#{与map的key对应}
接口
User getUser4(Map paramMap);
sql映射
<select id="getUser4" resultType="com.javasm.entity.User">select * from `user` where `name` = #{name} and `password` = #{password} </select>
测试类
@Testpublic void userSelectDemo4(){ SqlSession sqlSession = MyBatisHealper.getSqlSession();UserDao mapper =sqlSession.getMapper(UserDao.class); //传mapHashMap<String, Object> paramMap = new HashMap<>();paramMap.put("name","张四");paramMap.put("password","abc123"); User user = mapper.getUser4(paramMap);System.out.println(user);MyBatisHealper.backSqlSession(sqlSession); }
4通过注解自动封装map 建议使用
接口
User getUser5(@Param("username") String username,@Param("password") String password);
sql映射文件
<select id="getUser5" resultType="com.javasm.entity.User">select * from `user` where `name` = #{username} and `password` = #{password}</select>
测试类
@Testpublic void userSelectDemo5(){ SqlSession sqlSession = MyBatisHealper.getSqlSession();UserDao mapper =sqlSession.getMapper(UserDao.class); User user = mapper.getUser5("张三1","abc123");System.out.println(user);MyBatisHealper.backSqlSession(sqlSession); }
5通过list对象 传入多个参数
(有特殊固定用法 配合动态sql标签使用 普通不要使用)
接口
User getUser6(List params);
sql映射
<select id="getUser6" resultType="com.javasm.entity.User">select * from `user` where `name` = #{list[0]} and `password` = #{list[1]} </select>
测试类
@Testpublic void userSelectDemo6(){ SqlSession sqlSession = MyBatisHealper.getSqlSession();UserDao mapper =sqlSession.getMapper(UserDao.class); List<String> params = new ArrayList<String>();params.add("李四");params.add("123abc");User user = mapper.getUser6(params);System.out.println(user);MyBatisHealper.backSqlSession(sqlSession); }
主要使用的方式 1简单数据,2对象数据,4注解转map
6.1select 查询标签
1查单条
接口
User getUser();
sql映射
<select id="getUser" resultType="com.javasm.entity.User">select * from `user` where id = 1</select>
测试
@Testpublic void userSelectDemo1(){ SqlSession sqlSession = MyBatisHealper.getSqlSession();UserDao mapper =sqlSession.getMapper(UserDao.class);User user = mapper.getUser();System.out.println(user);MyBatisHealper.backSqlSession(sqlSession); }
2查集合对象
接口
List<User> listUser();
sql映射
<select id="listUser" resultType="com.javasm.entity.User">select * from `user`</select>
测试
@Testpublic void mybatisDemo2InterfaceRef(){//通过工具类拿连接SqlSession sqlSession = MyBatisHealper.getSqlSession();//接口映射//dao实现类的代码UserDao userDaoImpl = sqlSession.getMapper(UserDao.class);//调用方法List<User> users = userDaoImpl.listUser();System.out.println(users);//归还连接MyBatisHealper.backSqlSession(sqlSession); }
3 统计查询条数
接口
//统计总条数Integer countUser();
sql映射
<select id="countUser" resultType="java.lang.Integer">select count(1) from `user` </select>
测试
@Testpublic void userCountDemo(){ SqlSession sqlSession = MyBatisHealper.getSqlSession();UserDao mapper =sqlSession.getMapper(UserDao.class); Integer resNum = mapper.countUser(); System.out.println(resNum);MyBatisHealper.backSqlSession(sqlSession); }
4模糊查询
接口
List<User> listUserByName(String name);
sql映射
通过CONCAT('%',#{name},'%') 拼接前后模糊匹配符 可以直接与页面传来的参数结合使用
<select id="listUserByName" resultType="com.javasm.entity.User"> select * from `user` where `name` like CONCAT('%',#{name},'%') </select>
测试
@Testpublic void userListByNameDemo(){ SqlSession sqlSession = MyBatisHealper.getSqlSession();UserDao mapper =sqlSession.getMapper(UserDao.class); List<User> users = mapper.listUserByName("张"); System.out.println(users);MyBatisHealper.backSqlSession(sqlSession); }
5动态升序降序
#{} 拼参数 使用占位符?
${} 拼语法 没有使用占位符 有sql注入风险 尽量少用
接口
//动态升序降序List<User> listUserByOrder(String aOrd);
sql映射
<select id="listUserByOrder" resultType="com.javasm.entity.User">select * from `user`order by age ${aOrd} </select>
测试
public void userListByOrderDemo(){ SqlSession sqlSession = MyBatisHealper.getSqlSession();UserDao mapper =sqlSession.getMapper(UserDao.class); List<User> users = mapper.listUserByOrder("desc"); System.out.println(users);MyBatisHealper.backSqlSession(sqlSession); }
6.2 insert 添加标签
通过map插入数据
接口
//添加用户Integer insertUser(@Param("id")Integer id,@Param("name")String name);
sql映射
<insert id="insertUser">insert into `user` (id,`name`) VALUES (#{id},#{name})</insert>
测试类
@Testpublic void insertUserDemo1(){ SqlSession sqlSession = MyBatisHealper.getSqlSession();UserDao mapper =sqlSession.getMapper(UserDao.class); Integer i = mapper.insertUser(6, "老王2"); System.out.println(i);//添加 修改 删除 需要提交MyBatisHealper.backAndCommitSqlSession(sqlSession); }
通过对象插入数据
接口
//添加用户2Integer insertUser2(User inputUser);
sql映射
<insert id="insertUser2">insert into `user` (id,`name`,`password`,age,user_addr)VALUES (#{id},#{name},#{password},#{age},#{userAddr})</insert>
测试类
@Testpublic void insertUserDemo2(){ SqlSession sqlSession = MyBatisHealper.getSqlSession();UserDao mapper =sqlSession.getMapper(UserDao.class); User inputUser = new User(7, "小老王", "abc123", 13, "你家隔壁"); Integer i = mapper.insertUser2(inputUser); System.out.println(i);//添加 修改 删除 需要提交MyBatisHealper.backAndCommitSqlSession(sqlSession); }
获取自增主键
接口
//添加用户3//使用自增 并获取自增编号Integer insertUser3(User inputUser);
sql映射
<!-- useGeneratedKeys="true" 开启获取自增主键keyProperty="id" 放入插入对象的某个属性--><insert id="insertUser3" useGeneratedKeys="true" keyProperty="id">insert into `user` (`name`,`password`,age,user_addr)VALUES (#{name},#{password},#{age},#{userAddr})</insert>
测试类
@Testpublic void insertUserDemo3(){ SqlSession sqlSession = MyBatisHealper.getSqlSession();UserDao mapper =sqlSession.getMapper(UserDao.class); User inputUser = new User("小老王3", "abc123", 13, "你家隔壁"); Integer i = mapper.insertUser3(inputUser);//插入的对象 id的位置 会存入获取到的自增主键System.out.println(inputUser);//添加 修改 删除 需要提交MyBatisHealper.backAndCommitSqlSession(sqlSession); }
6.3修改标签
接口
//修改用户Integer updateUser(User inputUser);
sql映射
<update id="updateUser">update `user` set `name` = #{name},`password` = #{password}where id = #{id}</update>
测试类
@Testpublic void updateUserDemo(){ SqlSession sqlSession = MyBatisHealper.getSqlSession();UserDao mapper =sqlSession.getMapper(UserDao.class); User inputUser = new User(8,"小老王3", "abc123", null, null); Integer i = mapper.updateUser(inputUser); System.out.println(inputUser);//添加 修改 删除 需要提交MyBatisHealper.backAndCommitSqlSession(sqlSession); }
注意 update 修改语句 一定要带where条件
6.4删除标签
接口
//删除用户Integer deleteUser(Integer id);
sql映射
<delete id="deleteUser"> delete from `user` where id = #{id}</delete>
测试类
@Testpublic void deleteUserDemo(){ SqlSession sqlSession = MyBatisHealper.getSqlSession();UserDao mapper =sqlSession.getMapper(UserDao.class); Integer i = mapper.deleteUser(9);//添加 修改 删除 需要提交MyBatisHealper.backAndCommitSqlSession(sqlSession); }
使用emp表 测试课堂案例