6、单表CRUD操作

  • CRUD
    • 增 (saveUser)
    • 删 (deleteUser)
    • 改 (updateUser)
    • 查 (findAllUser,FindUserById)
  • like (findUserByName,findUserByName2)
  • 聚合函数 (findTotal)
  • 获取保存数据的id(saveUser)
  • OGNL取值 (findUserByWorkCard)

准备工作

1、user实体类

public class User {
    private Integer id;
    private String username;
    private Date birthday;
    private String gender;
    private String address;
      //省略get、set和toString方法
}

2、WorkCard实体类

public class WorkCard {
    private User user;
     //省略get、set方法
}

3、数据库

CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名称',
  `birthday` datetime DEFAULT NULL COMMENT '生日',
  `gender` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '性别',
  `address` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`) USING BTREE
)

表结构

接口

public interface UserMapper {
    /**
     * 查询所有用户
     * @return
     */
    List<User> findAllUser();
    /**
     * 保存用户
     */
    void saveUser(User user);
    /**
     * 更新用户
     */
    void updateUser(User user);
    /**
     * 删除用户
     */
    void deleteUser(Integer id);
    /**
     * 根据id查询用户
     */
    User findUserById(Integer id);
    /**
     * like模糊查询,第一种
     */
    List<User> findUserByName(String username);
    /**
     * like模糊查询,第二种
     */
    List<User> findUserByName2(String username);
    /**
     * 查询总用户数(聚合函数count)
     */
    int findTotal();
    /**
     * 根据WorkCard类中User属性的username模糊查询
     * WorkCard是user的封装类
     * OGNL表达式取值
     */
    List<User> findUserByWorkCard(WorkCard workCard);
}

映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace填写的是Mapper接口的全限定名-->
<mapper namespace="com.example.mapper.UserMapper">
    <!--查询所有-->
    <select id="findAllUser" resultType="com.example.pojo.User">
        select * FROM user
    </select>
    <!--添加用户-->
    <insert id="saveUser" parameterType="com.example.pojo.User">
        <!--配置插入操作后,获取插入数据的id -->
        <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
          SELECT last_insert_id();
        </selectKey>
        INSERT INTO user(username,birthday,gender,address) VALUES (#{username},#{birthday},#{gender},#{address})
    </insert>
    <!--更新用户-->
    <update id="updateUser" parameterType="com.example.pojo.User">
        UPDATE user SET username = #{username}, birthday = #{birthday}, gender = #{gender}, address = #{address} WHERE id = #{id}
    </update>
    <!--删除用户-->
    <delete id="deleteUser" parameterType="Integer">
        <!--当参数只用一个并且参数是基本数据类型的包装类是#{占位符}占位符可以随便写 -->
        DELETE FROM user WHERE id = #{userid}
    </delete>
    <!--通过id查询用户-->
    <select id="findUserById" parameterType="Integer" resultType="com.example.pojo.User">
        select * FROM user where id = #{userId}
    </select>
    <!--通过名字模糊查询用户-->
    <select id="findUserByName" parameterType="java.lang.String" resultType="com.example.pojo.User">
        SELECT * FROM user WHERE username LIKE '%${username}%'
    </select>
    <!--通过名字模糊查询用户-->
    <select id="findUserByName2" parameterType="java.lang.String" resultType="com.example.pojo.User">
        SELECT * FROM user WHERE username LIKE #{username}
    </select>
    <!--查询总用户数,聚合函数count()-->
    <select id="findTotal" resultType="int">
        SELECT count(*) FROM user
    </select>

    <!--OGNL表达式
        Object Graphic Navigation Language 对象 图 导航 语言
        它是通过对象的取值方法来获取数据,在写法上吧get给省略了
        比如:获取用户名
            通常的写法:user.getUsername();
            OGNL表达式写法 user.username
    -->
    <select id="findUserByWorkCard" parameterType="com.example.pojo.WorkCard" resultType="com.example.pojo.User">
        SELECT * FROM user WHERE username LIKE #{user.username}
    </select>
</mapper>
public class UserMapperTest {
    private UserMapper userMapper;
    private SqlSession sqlSession;
    private InputStream stream;

    @Before
    public void init() throws IOException {
        stream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
        sqlSession = sqlSessionFactory.openSession();
        userMapper = sqlSession.getMapper(UserMapper.class);
    }

    @After
    public void destory() throws IOException {
//        每次执行完都进行事务提交
        sqlSession.commit();
        sqlSession.close();
        stream.close();
    }

    /**
     * 查询所有
     */
    @Test
    public void testFindAll(){

        List<User> allUser = userMapper.findAllUser();
        for (User user: allUser
             ) {
            System.out.println(user);
        }
    }

    /**
     * 保存用户
     */
    @Test
    public void testSaveUser(){
        User user = new User();
        user.setUsername("小红");
        user.setGender("男");
        user.setBirthday(new Date());
        user.setAddress("汕头市");
        userMapper.saveUser(user);

        System.out.println(user);
    }
    /**
     * 更新用户
     */
    @Test
    public void testUpdateUser(){
        User user = new User();
        user.setUsername("小红");
        user.setGender("女");
        user.setBirthday(new Date());
        user.setAddress("汕头市");
        user.setId(52);
        userMapper.updateUser(user);
    }
    /**
     * 删除用户
     */
    @Test
    public void testDeleteUser(){
        userMapper.deleteUser(50);
    }
    /**
     * 根据用户id查询用户
     */
    @Test
    public void testFindUserById(){
        User user = userMapper.findUserById(48);
        System.out.println(user);
    }
    /**
     * 根据用户姓名模糊查询用户
     */
    @Test
    public void testFindUserByName(){
        /**
         * 第一种写法在dao层的sql语句中添加'%${username}%',这种方式的缺点是不能预处理
         */
        List<User> users = userMapper.findUserByName("小");
        for (User user: users
             ) {
            System.out.println(user);
        }
    }
    /**
     * 根据用户姓名模糊查询用户
     */
    @Test
    public void testFindUserByName2(){
        /**
         * 第二种写法是在传参是就添加了%
         */
        List<User> users = userMapper.findUserByName2("%" + "小" + "%");
        for (User user: users
                ) {
            System.out.println(user);
        }
    }
    /**
     * 测试聚合函数
     */
    @Test
    public void testFindTotal(){
        int total = userMapper.findTotal();
        System.out.println(total);
    }

    /**
     * OGNL取值
     */
    /**
     * 根据用户姓名模糊查询用户
     */
    @Test
    public void findUserByWorkCard(){
        User user = new User();
        user.setUsername("%" + "小" + "%");
        WorkCard workCard = new WorkCard();
        workCard.setUser(user);
        List<User> users = userMapper.findUserByWorkCard(workCard);
        for (User u: users
             ) {
            System.out.println(u);
        }
    }
}
posted @ 2020-07-24 11:38  lawrence林  阅读(208)  评论(0编辑  收藏  举报