多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 属性名和字段名对不上解决的办法 1.就是在xml 的SQL语句中给查询的列起别名. 2.在mapper标签中进行配置. ~~~ <resultMap id="userMap" type="com.like.domain.User"> //所有查询的resultType指定为此id <!--主键字段的对应--> <id property="" column=""></id> <!--属性和列名--> <result property="" column=""></result> <result property="" column=""></result> <result property="" column=""></result> </resultMap> ~~~ ## 查询一个 ~~~ User findById(Integer id); ~~~ ~~~ <select id="findById" parameterType="java.lang.Integer" resultType="com.like.domain.User"> select * from user where id = #{id} </select> ~~~ ~~~ User user = mapper.findById(48); System.out.println(user); ~~~ ## 模糊查询 ~~~ List<User> findByName(String username); ~~~ ~~~ <select id="findByName" parameterType="java.lang.String" resultType="com.like.domain.User"> select * from user where username like #{username} //这种方式性能更好 select * from user where username like '%#{value}%' //这种写法也可以,但是必须写成value </select> ~~~ ~~~ //使用SqlSession创建Dao接口的代理对象 IUserDao mapper = session.getMapper(IUserDao.class); //使用代理对象执行方法 List<User> users = mapper.findByName("%王%"); List<User> users = mapper.findByName("王"); //针对第二种写法 System.out.println(users); ~~~ ## 查询返回一行一列 ~~~ int findTotal(); ~~~ ~~~ <select id="findTotal" resultType="int"> select count(id) from user </select> ~~~ ~~~ //使用SqlSession创建Dao接口的代理对象 IUserDao mapper = session.getMapper(IUserDao.class); //使用代理对象执行方法 int total = mapper.findTotal(); System.out.println(total); ~~~ ## 插入 ~~~ void saveUser(User user); ~~~ ~~~ <insert id="saveUser" parameterType="com.like.domain.User"> insert into user(username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address}) </insert> ~~~ ~~~ User user = new User(); user.setUsername("jack"); user.setBirthday(new Date()); user.setSex("男"); user.setAddress("江苏"); //使用SqlSession创建Dao接口的代理对象 IUserDao mapper = session.getMapper(IUserDao.class); //使用代理对象执行方法 mapper.saveUser(user); //手动提交事务 session.commit(); ~~~ ## 插入并获得id 可以写成这样 ~~~ <insert id="saveUser" parameterType="com.like.domain.User"> -- 配置插入数据后获取插入数据的id. -- 第一个id是属性id,第二个是数据库的主键,第三个是先于插入SQL还是后于,第四个是返回类型 <selectKey keyProperty="id" keyColumn="id" order="AFTER" resultType="int"> select last_insert_id() </selectKey> insert into user(username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address}) </insert> ~~~ ~~~ //使用SqlSession创建Dao接口的代理对象 IUserDao mapper = session.getMapper(IUserDao.class); System.out.println("保存前:" + user); //使用代理对象执行方法 mapper.saveUser(user); //手动提交事务 session.commit(); System.out.println("保存后:" + user); //这里的对象已经有了id属性了 ~~~ ## 使用实体类的包装对象作为查询条件 QueryVo类: vo表示数据对象(value object) ~~~ package com.like.domain; public class QueryVo { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } } ~~~ ~~~ <select id="findUserByVo" parameterType="com.like.domain.QueryVo" resultType="com.like.domain.User"> select * from user where username like #{user.username} </select> ~~~ ~~~ QueryVo queryVo = new QueryVo(); User user = new User(); user.setUsername("%王%"); queryVo.setUser(user); //使用SqlSession创建Dao接口的代理对象 IUserDao mapper = session.getMapper(IUserDao.class); //使用代理对象执行方法 List<User> users = mapper.findUserByVo(queryVo); System.out.println(users); ~~~ ## 更新 ~~~ void updateUser(User user); ~~~ ~~~ <update id="updateUser" parameterType="com.like.domain.User"> update user set username = #{username},address = #{address},birthday = #{birthday},sex = #{sex} where id = #{id} </update> ~~~ ~~~ User user = new User(); user.setId(50); user.setUsername("milan"); user.setBirthday(new Date()); user.setSex("男"); user.setAddress("江苏"); //使用SqlSession创建Dao接口的代理对象 IUserDao mapper = session.getMapper(IUserDao.class); //使用代理对象执行方法 mapper.updateUser(user); //手动提交事务 session.commit(); ~~~ ## 删除 ~~~ void deletedUser(Integer id); ~~~ ~~~ <delete id="deletedUser" parameterType="java.lang.Integer"> 这里只是一个占位符,可以随便写 delete from user where id = #{id} </delete> ~~~ ~~~ //使用SqlSession创建Dao接口的代理对象 IUserDao mapper = session.getMapper(IUserDao.class); //使用代理对象执行方法 mapper.deletedUser(50); //手动提交事务 session.commit(); ~~~