2021-07-21学习笔记

本文介绍了如何使用MyBatis进行User对象的CRUD操作,包括编写user.xml映射文件、Java接口测试及对象属性映射的调整。通过实例展示了如何在修改数据库结构后更新映射,并演示了同时查询User和Classes表的测试方法。

1.编写user.xml

<?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">
<mapper namespace="zjhsxl">
    <insert id="addUser" parameterType="com.pro.domain.User">
        insert into user(userId,userName,password) values(#{userId},#{userName},#{password})
    </insert>
    <delete id="deleteUser" parameterType="int">
        delete from user where userId=#{userId}
    </delete>
    <update id="updateUser" parameterType="com.pro.domain.User">
        update user set userName=#{userName},password=#{password} where userId=#{userId}
    </update>
    <select id="selectOne" parameterType="int" resultType="com.pro.domain.User">
        select * from user where userId=#{userId}
    </select>
</mapper>

类似dao层 


2.编写MyTest.java

package com.pro.test;

import com.pro.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

public class MyTest {

    @Test
    public void testSave() throws IOException {
        //拿到配置文件 mybatis-config
        //准备一个管道 ,接在mybatis-config后面
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //使用这个文件,创建一个工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        //工厂开始工作,生产了一个产品,sqlSession对象,这个对象是封装了对数据库的操作,里面有很多的方法
        SqlSession sqlSession = sqlSessionFactory.openSession();
        User user = new User(7,"小芳","123");
        sqlSession.insert("zjhsxl.addUser",user);
        sqlSession.commit();
        sqlSession.close();

    }

    @Test
    public void testDelete() throws IOException {
        //拿到配置文件 mybatis-config
        //准备一个管道 ,接在mybatis-config后面
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //使用这个文件,创建一个工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        //工厂开始工作,生产了一个产品,sqlSession对象,这个对象是封装了对数据库的操作,里面有很多的方法
        SqlSession sqlSession = sqlSessionFactory.openSession();
        sqlSession.delete("zjhsxl.deleteUser",3);
        sqlSession.commit();
        sqlSession.close();

    }

    @Test
    public void testUpdate() throws IOException {
        //拿到配置文件 mybatis-config
        //准备一个管道 ,接在mybatis-config后面
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //使用这个文件,创建一个工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        //工厂开始工作,生产了一个产品,sqlSession对象,这个对象是封装了对数据库的操作,里面有很多的方法
        SqlSession sqlSession = sqlSessionFactory.openSession();
        User user = new User(7,"小芳fangfang","123");
        sqlSession.update("zjhsxl.updateUser",user);
        sqlSession.commit();
        sqlSession.close();

    }
    @Test
    public void testSelect() throws IOException {
        //拿到配置文件 mybatis-config
        //准备一个管道 ,接在mybatis-config后面
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //使用这个文件,创建一个工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        //工厂开始工作,生产了一个产品,sqlSession对象,这个对象是封装了对数据库的操作,里面有很多的方法
        SqlSession sqlSession = sqlSessionFactory.openSession();
        User user = sqlSession.selectOne("zjhsxl.selectUser",7);
        System.out.println("--->"+user.getUserName());
        sqlSession.close();

    }
}

实现增删查改


3.增加before方法和after方法,降低代码重复

package com.pro.test;

import com.pro.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

public class MyTest {
    SqlSession sqlSession = null;

    @Before
    public void setUp() throws Exception {
        //拿到配置文件 mybatis-config
        //准备一个管道 ,接在mybatis-config后面
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //使用这个文件,创建一个工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        //工厂开始工作,生产了一个产品,sqlSession对象,这个对象是封装了对数据库的操作,里面有很多的方法
        sqlSession = sqlSessionFactory.openSession();
    }

    @After
    public void tearDown() throws Exception {
        sqlSession.close();
    }

    @Test
    public void testSave() throws IOException {
        User user = new User(7, "小芳", "123");
        sqlSession.insert("zjhsxl.addUser", user);
        sqlSession.commit();
    }

    @Test
    public void testDelete() throws IOException {
        sqlSession.delete("zjhsxl.deleteUser", 3);
        sqlSession.commit();
    }

    @Test
    public void testUpdate() throws IOException {
        User user = new User(7, "小芳fang", "123");
        sqlSession.update("zjhsxl.updateUser", user);
        sqlSession.commit();
    }

    @Test
    public void testSelect() throws IOException {
        User user = sqlSession.selectOne("zjhsxl.selectUser", 7);
        System.out.println("--->" + user.getUserName());
    }
}

4.如果修改了数据库,如何更改查询语句

修改user.xml

<select id="selectUser" parameterType="int" resultType="com.pro.domain.User">
        select userId,userName1 as 'userName',password from user where userId=#{userId}
    </select>

5.如果修改了很多,如何对其Java类的属性名和数据库的属性名

修改user.xml

 <!--        关联了Java类和数据库表-->
        <mapper namespace="zjhsxl">
        <resultMap id="userMap" type="com.pro.domain.User">
        <id property="userId" column="userId"/>
        <result property="userName" column="userName"/>
        <result property="password" column="password"/>
        </resultMap>

6添加info和classes类

package com.pro.domain;

public class Info {
    private Integer infoId;
    private String msg;
    private Classes classes;
    private User user;

    public Integer getInfoId() {
        return infoId;
    }

    public void setInfoId(Integer infoId) {
        this.infoId = infoId;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Classes getClasses() {
        return classes;
    }

    public void setClasses(Classes classes) {
        this.classes = classes;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}
package com.pro.domain;

public class Classes {
    private int classId;
    private String className;

    public int getClassId() {
        return classId;
    }

    public void setClassId(int classId) {
        this.classId = classId;
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }
}

7.添加info.xml

<?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">
<mapper namespace="zjhsxl">
    <resultMap id="infoMap" type="com.pro.domain.Info">
        <id property="infoId" column="infoId"/>
        <result property="msg" column="msg"/>
        <result property="classes.classId" column="classId"/>
        <result property="classes.Name" column="className"/>
        <result property="user.userId" column="userId"/>
        <result property="user.userName" column="userName"/>
        <result property="user.password" column="password"/>
    </resultMap>
    <select id="selectInfo" parameterType="int" resultMap="infoMap">
        select * from info where infoId=#{infoId}
    </select>
</mapper>

8.添加info.xml

<?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">
<mapper namespace="zjhsxl">
    <resultMap id="infoMap" type="com.pro.domain.Info">
        <id property="user.userId" column="userId"/>
        <result property="user.userName" column="userName"/>
        <result property="user.password" column="password"/>
        <result property="classes.classId" column="classId"/>
        <result property="classes.className" column="className"/>
    </resultMap>
    <select id="selectInfo" parameterType="int" resultMap="infoMap">
        select * from user u,classes c where u.classId=c.classId
    </select>
</mapper>

9.添加一个测试方法,同时显示两张class和user两张表的内容


    @Test
    public void testSelectInfo() throws IOException {
        List<Info> infoList = sqlSession.selectList("zjhsxl.selectInfo");
        sqlSession.commit();
        System.out.println(infoList.size());
    }

遇到的难点:运行报错 userId显示为null ,因为info类中新建了user,可是user类中我写了user的有参构造方法,最后自己补上一个无参的构造方法才能新建user

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值