SSM框架之Mybatis学习笔记day02

Mybatis学习笔记day02

目录

1.添加操作
2.删除操作
3.修改操作
4.查询操作

1. 添加操作

在IUserDao.java接口中添加saveUser()方法如下图:

 /*
    * 添加用户
    * */
    void saveUser(User user);

然后在IUserDao.xml配置文件中添加SQL语句以及相关配置,使用select标签
id为接口中的方法名称,paramerType全限定类名

<!--    添加用户-->
    <insert id="saveUser" parameterType="com.itheima.domain.User">
        insert into user(username,address,sex,birthday) values(#{username},#{address},#{sex},#{birthday});   
    </insert>
测试添加操作是否成功

由于每次取到dao对象的操作有的繁琐,且每次测试不同方法都要重复,所以就把要重复的操作抽取成两个方法init()和destroy(),分别在测试前和测试完成后执行,需要分别在方法上加@Before和@After注解

public class MybatisTest {
    private IUserDao dao;
    private InputStream in;
    private SqlSession session;

    @Before
    public void init() throws IOException {
        //1.读取配置文件
        in= Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建工厂对象
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
        //3.创建SqlSession对象
        session=factory.openSession();

        //4.创建代理对象
        dao=session.getMapper(IUserDao.class);

    }

    @After
    public void destroy() throws IOException {
        session.commit();

        session.close();
        in.close();
    }

@Test
//1.查询所有的方法
    public void testFindAll() throws IOException {

    List<User> list=dao.findAll();

    for(User user:list)
        System.out.println(user);
    }


    //2.增加用户
    @Test
    public void saveUser(){
        User user=new User();
        user.setUsername("add User property");
        user.setAddress("北京市顺义区");
        user.setSex("男");
        user.setBirthday(new Date());
        System.out.println("操作之前"+user);
        dao.saveUser(user);
        System.out.println("操作之后"+user);

    }
}

注意:在执行除查询外的所有操作时,需要提交事务,不然方法不能成功执行,所有这里才有session.commit()这一步。


2.删除操作

在接口中添加deleteUser方法

/*
    * 删除用户
    * */
    void deleteUser(int id);

在IUserDao.xml中配置,这里是根据用户id删除用户
只有一个参数的时候,参数的名字可以随便写,但是如果参数多于一个,那么必须严格按照数据库和实体类的命名写
与之前不同的是,这里传的参数不是User对象,是一个整数,所以不需要写实体类的全限定类名

<!--    删除用户-->
    <delete id="deleteUser" parameterType="Integer">
        delete from user where id=#{uid};
    </delete>
测试删除方法
//删除用户
    @Test
    public void deleteUser(){
        
        dao.deleteUser(50);
    }

执行完此方法后,再去数据库查询,此条记录不存在,证明删除操作成功


3.修改操作

在接口中添加修改方法

 /*
    * 更新用户
    *
    * */
    void updateUser(User user);

到IUserDao.xml配置修改方法

<!--    更新用户-->
    <update id="updateUser" parameterType="com.itheima.domain.User" >
        update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{uid};
    </update>

添加修改测试方法

//更新用户
    @Test
    public void updateUser(){
        User user=new User();
        user.setId(46);
        user.setAddress("南京");
        user.setSex("女");
        user.setBirthday(new Date());
        dao.updateUser(user);

    }

执行完此方法后,再去数据库查询,若此条记录被修改,证明修改操作成功


4.查询操作

(1)根据id查询

接口中添加方法

 //根据id查找用户
    User findUserById(int id);

到IUserDao.xml配置

<!--    根据id查询用户-->
    <select id="findUserById" parameterType="Integer" resultType="com.itheima.domain.User">
        select * from user where id=#{uid};
    </select>

添加测试方法

//根据id查询用户
    @Test
    public void findUserById(){
        User user=dao.findUserById(46);
        System.out.println(user);
    }
(2)根据姓名模糊查询

接口中添加方法,查询可能存在多条记录,所以返回值是List

 //根据名字模糊查询用户
    List<User> findUserByName(String username);

编辑配置文件

<!--    根据名字模糊查询用户-->
    <select id="findUserByName" parameterType="String" resultType="com.itheima.domain.User">      
            select * from user where username like #{username};
    </select>

注意:虽然 IUserDao 中方法的返回值为 List,但是映射文件中 resultType写 User就行。因为如果有多条记录的话,Mybatis 会自动帮我们封装成一个 List 集合。

添加测试方法

//根据姓名模糊查询用户
    @Test
    public void findUserByName(){
        List<User> list=dao.findUserByName("%王%");

        for(User user:list)
            System.out.println(user);
    }

注意:由于映射文件中的 SQL 语句并没有对参数进行模糊查询处理,所以在调用方法的时候我们必须手动为查询的关键字进行%拼接

使用聚合函数查询用户总数

接口中添加方法

//查询记录条数
    int countAll();

编辑配置文件

<!--    查询记录条数-->
    <select id="countAll" resultType="int">
        select count(id) from user;
    </select>

添加测试方法

//查询记录条数
    @Test
    public void countAll(){

        System.out.println(dao.countAll());
    }

你可能感兴趣的:(java框架,数据库,java,mybatis)