三、mybatis(xml注解)----crmd
1.查询所有数据
接口代码
/** * 查询所有用户数据 * @return */ List<User> findAll();
xml配置文件代码
<!-- 查询所有用户--> <select id="findAll" resultType="com.itheima.domain.User"> select * from user; </select>
测试代码
/**
* 测试查询所有对象
*/
@Test
public void testFindAll (){
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for(User user : users){
System.out.println(user);
}
}
2.添加用户数据
接口代码
/** * 添加用户 */ void saveUser(User user);
xml配置文件代码
<!-- 添加一个用户--> <insert id="saveUser" parameterType="com.itheima.domain.User"> insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address}) </insert>
测试代码
/** * 测试添加用户 */ @Test public void testSave(){ User user = new User(); user.setUsername("小花"); user.setBirthday(new Date()); user.setSex("男"); user.setAddress("台湾"); userDao.saveUser(user); }
3.修改用户数据
接口代码
/** * 修改用户 */ void updateUser(User user);
xml配置文件代码
<!--修改用户--> <update id="updateUser" parameterType="com.itheima.domain.User"> update user set username=#{username},birthday=#{birthday},sex=#{sex}, address=#{address} where id=#{id} </update>
测试代码
/** * 测试修改用户信息 */ @Test public void testUpdateUser(){ User user = new User(); user.setId(49); user.setUsername("葫芦娃"); user.setBirthday(new Date()); user.setSex("女"); user.setAddress("香港"); userDao.updateUser(user); }
4.删除用户数据
接口代码
/** * 删除用户 * */ void deleteUser(Integer userId);
xml配置文件代码
<!--删除用户--> <delete id="deleteUser" parameterType="Integer"> delete from user where id=#{id}; </delete>
测试代码
/** * 测试删除用户信息 */ @Test public void testDelete(){ userDao.deleteUser(51); }
5.根据用户id查询用户
接口代码
/** * 根据用户id查询用户信息 * @param id * @return */ User findById(Integer id);
xml配置文件代码
<!-- 根据id查询一个用户信息--> <select id="findById" parameterType="Int" resultType="com.itheima.domain.User"> select * from user where id=#{id}; </select>
测试代码
/** * 根据id查询用户数据 */ @Test public void testFindOne(){ User user = userDao.findById(45); System.out.println(user); }
6.模糊查询
接口代码
/** * 使用模糊查询 */ List<User> findByName(String userName);
xml配置文件代码
<!-- 使用模糊查询--> 第一种写法,需要在方法加%%(常用) <select id="findByName" parameterType="String" resultType="com.itheima.domain.User"> select * from user where username like #{username}; </select>
第二种写法,不需要在方法加%%(不常用) <select id="findByName" parameterType="String" resultType="com.itheima.domain.User"> select * from user where username like '%${value}%'; </select>
测试代码
/** * 使用模糊查询用户数据 */
第一种
@Test public void testFindByName(){ List<User> users = userDao.findByName("%王%");//注意这里 for(User user:users){ System.out.println(user); } }
第二种 @Test public void testFindByName(){
List<User> users = userDao.findByName("王");//注意这里 for(User user:users){ System.out.println(user); } }
7.添加一组数据,同时获得他的id值
接口代码
/** * 添加用户 */ void saveUser(User user);
xml配置代码
<!-- 添加一个用户;同时获得用户的id值--> <insert id="saveUser" parameterType="com.itheima.domain.User"> <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER"> select last_insert_id(); </selectKey> insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address}) </insert>
测试代码
/** * 测试添加用户,同时获得添加之后id值 */ @Test public void testSave(){ User user = new User(); user.setUsername("mybatis inserid"); user.setBirthday(new Date()); user.setSex("女"); user.setAddress("香港"); System.out.println("保存操作之前:" + user); userDao.saveUser(user); System.out.println("保存操作之后:" + user); }
8.通过Queryvo实体类中的条件进行查询
创建实体类
package com.itheima.domain; public class QueryVo { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
接口方法
/** * 根据queryvo中的查询条件查询用户 * @param vo * @return */ List<User> findUserByVo(QueryVo vo);
xml配置
<!-- 根据queryVo中的条件查询--> <select id="findUserByVo" parameterType="com.itheima.domain.QueryVo" resultType="com.itheima.domain.User"> select * from user where username like #{user.username}; </select>
测试代码
/** * 使用QueryVo条件查询数据 */ @Test public void testFindByVo(){ User user = new User(); QueryVo vo = new QueryVo(); user.setUsername("%王%"); vo.setUser(user); List<User> users = userDao.findUserByVo(vo); for(User u:users){ System.out.println(u); } }
9.实体类和数据库名称对不上解决办法
一、起别名
<!-- 实体类和数据库名字对不上--> <select id="findById" parameterType="Int" resultType="com.itheima.domain.User"> select id as userId,username as userName,address ad userAddress,sex as userSex, birthday as userBirthday from user; </select>
二、配置属性(注意前面是数据库名称,后面是实体类名称)
<!-- id:名字随便起,需要和下面查询resultMap相对应 type:实体类全限定类名 --> <resultMap id="userMap" type="com.itheima.domain.User"> <!-- id需要和主键对应 property:实体类主键 column:数据库主键 --> <id property="userId" column="id"></id> <result property="userName" column="username"></result> <result property="userBirthday" column="birthday"></result> <result property="userSex" column="sex"></result> <result property="userAddress" column="address"></result> </resultMap> <!-- 注意这里的resultMap要和上线resultMap的id一致--> <select id="findById" resultMap="userMap"> select * from user; </select>
。。。