MyBatis案例(详解)

MyBatis是一种ORM(Object-Relational Mapping)框架,它通过XML或注解的方式将Java对象和SQL语句进行映射,从而实现对数据库的增删改查操作。下面是MyBatis的增删改查说明:

  1. 增加(insert)

在MyBatis中,插入数据可以使用insert语句,语句可以直接写在XML文件中,也可以使用注解的方式。例如:

  • XML方式:

Copy

<insertid="addUser"parameterType="User">
  INSERT INTO user (name, age, gender) VALUES (#{name}, #{age}, #{gender})
</insert>
  • 注解方式:

Copy

@Insert("INSERT INTO user (name, age, gender) VALUES (#{name}, #{age}, #{gender})")intaddUser(User user);
  1. 删除(delete)

在MyBatis中,删除数据可以使用delete语句,语句可以直接写在XML文件中,也可以使用注解的方式。例如:

  • XML方式:

Copy

<deleteid="deleteUserById"parameterType="int">
  DELETE FROM user WHERE id = #{id}
</delete>
  • 注解方式:

Copy

@Delete("DELETE FROM user WHERE id = #{id}")intdeleteUserById(int id);
  1. 修改(update)

在MyBatis中,修改数据可以使用update语句,语句可以直接写在XML文件中,也可以使用注解的方式。例如:

  • XML方式:

Copy

<updateid="updateUser"parameterType="User">
  UPDATE user SET name = #{name}, age = #{age}, gender = #{gender} WHERE id = #{id}
</update>
  • 注解方式:

Copy

@Update("UPDATE user SET name = #{name}, age = #{age}, gender = #{gender} WHERE id = #{id}")intupdateUser(User user);
  1. 查询(select)

在MyBatis中,查询数据可以使用select语句,语句可以直接写在XML文件中,也可以使用注解的方式。例如:

  • XML方式:

Copy

<selectid="getUserById"parameterType="int"resultType="User">
  SELECT * FROM user WHERE id = #{id}
</select>
  • 注解方式:

Copy

@Select("SELECT * FROM user WHERE id = #{id}")
User getUserById(int id);

MyBatis练习示例:

假设有一个学生表(student),包含以下字段:

字段名 类型 描述

id int 学生ID

name varchar 学生姓名

age int 学生年龄

gender varchar 学生性别

score double 学生成绩

请使用MyBatis实现以下功能:

根据学生ID查询学生信息。

查询所有学生的信息,并按照成绩从高到低排序。

查询所有女学生的信息,并按照年龄从小到大排序。

插入一个学生的信息。

更新一个学生的信息。

删除一个学生的信息。

批量删除学生的信息

以下是一个简单的MyBatis练习作业示例代码

创建数据库插入数据

CREATE TABLE student (
id INT PRIMARY KEY, 
name VARCHAR(50), 
age INT, 
gender VARCHAR(10),
score DOUBLE 
);
INSERT INTO student (id, name, age, gender, score) VALUES (1, '张三', 18, '男', 90.5);

INSERT INTO student (id, name, age, gender, score) VALUES (2, '李四', 19, '女', 85.2);

INSERT INTO student (id, name, age, gender, score) VALUES (3, '王五', 20, '男', 92.3);

INSERT INTO student (id, name, age, gender, score) VALUES (4, '赵六', 21, '女', 88.9);

INSERT INTO student (id, name, age, gender, score) VALUES (5, '钱七', 22, '男', 95.1);
INSERT INTO student (id, name, age, gender, score) VALUES(7, '周九', 19, '女', 88.5);

INSERT INTO student (id, name, age, gender, score) VALUES(8, '吴十', 20, '男', 86.0);
INSERT INTO student (id, name, age, gender, score) VALUES(9, '郑十一', 18, '女', 93.0);
INSERT INTO student (id, name, age, gender, score) VALUES(10, '王十二', 19, '男', 91.5);

java实体类

public class Student {
    public Integer id; // 学生ID
    public String name; // 学生姓名
    public Integer age; // 学生年龄
    public String gender; // 学生性别
    public double score; // 学生成绩

    public Integer getId() { // 获取学生ID
        return id;
    }

    public void setId(Integer id) { // 设置学生ID
        this.id = id;
    }

    public String getName() { // 获取学生姓名
        return name;
    }

    public void setName(String name) { // 设置学生姓名
        this.name = name;
    }

    public Integer getAge() { // 获取学生年龄
        return age;
    }

    public void setAge(Integer age) { // 设置学生年龄
        this.age = age;
    }

    public String getGender() { // 获取学生性别
        return gender;
    }

    public void setGender(String gender) { // 设置学生性别
        this.gender = gender;
    }

    public double getScore() { // 获取学生成绩
        return score;
    }

    public void setScore(double score) { // 设置学生成绩
        this.score = score;
    }

    @Override
    public String toString() { // 重写toString()方法,方便输出学生信息
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                ", score=" + score +
                '}';
    }
}

接口

public interface StudentDao {
    /**
     * 根据学生ID查询学生信息
     * @param id 学生ID
     * @return 查询到的学生信息
     */
    Student selectById(int id);

    /**
     * 查询所有学生的信息,并按照成绩从高到低排序
     * @return 查询到的学生信息列表
     */
    List<Student> selectAllOrderByScore();

    /**
     * 查询所有女学生的信息,并按照年龄从小到大排序
     * @return 查询到的女学生信息列表
     */
    List<Student> selectAllFemaleOrderByAge();

    /**
     * 插入一个学生的信息
     * @param student 要插入的学生信息
     */
    void insert(Student student);

    /**
     * 更新一个学生的信息
     * @param student 要更新的学生信息
     */
    void update(Student student);

    /**
     * 删除一个学生的信息
     * @param id 要删除的学生ID
     */
    void deleteById(int id);

    /**
     * 批量删除学生的信息
     * @param ids 要删除的学生ID列表
     */
    void deleteBatch(List<Integer> ids);
}

映射类

<?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文件对应的dao接口为com.ding.dao.StudentDao-->
<mapper namespace="com.ding.dao.StudentDao"> <!--根据id查询学生信息,参数为int类型,返回值为Student类型-->
    <select id="selectById" parameterType="int" resultType="student">
        select id, name, age, gender, score
        from student
        where id = #{id}
    </select> <!--查询所有学生信息,按照成绩降序排列,返回值为List<Student>类型-->
    <select id="selectAllOrderByScore" resultType="student">
        select id, name, age, gender, score
        from student
        order by score desc
    </select> <!--查询所有女生信息,按照年龄升序排列,返回值为List<Student>类型-->
    <select id="selectAllFemaleOrderByAge" resultType="student">
        select id, name, age, gender, score
        from student
        where gender = 'female'
        order by age asc
    </select> <!--插入学生信息,参数为Student类型-->
    <insert id="insert" parameterType="com.ding.baen.Student">
        insert into student(name, age, gender, score)
        values (#{name}, #{age}, #{gender},
                #{score})
    </insert> <!--更新学生信息,参数为Student类型-->
    <update id="update" parameterType="com.ding.baen.Student">update student
        <set>
            <!--以下为动态SQL语句,根据参数值是否为空来判断是否需要更新-->
            <if test="name!=null and name!=''">
                name = #{name},
            </if>
            <if test="age!=null and age!=''">
                age = #{age},
            </if>

            <if test="gender!=null and gender!=''">
                gender = #{gender},
            </if>

            <if test="score!=null and score!=''">
                score = #{score},
            </if>
        </set>
        where id = #{id}
    </update>
    <!--根据id删除学生信息,参数为int类型-->
    <delete id="deleteById" parameterType="int">
        delete
        from student
        where id = #{id}
    </delete>
    <!--批量删除学生信息,参数为List<Integer>类型-->
    <delete id="deleteBatch" parameterType="list">
        delete from student where id in
        <!--使用foreach标签遍历List<Integer>,生成IN语句-->
        <foreach collection="list" item="id" open="(" separator="," close=")">#{id}
        </foreach>
    </delete>
</mapper>

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--MyBatis配置文件-->
<configuration> <!--引入jdbc.properties文件-->
    <properties resource="jdbc.properties"/> <!--MyBatis全局配置-->
    <settings> <!--设置日志实现为log4j-->
        <setting name="logImpl" value="log4j"/>
    </settings> <!--类型别名配置,将com.ding.baen包下的类注册为别名-->
    <typeAliases>
        <package name="com.ding.baen"/>
    </typeAliases> <!--数据源配置-->
    <environments default="mysql">
        <environment id="mysql"> <!--事务管理器类型为JDBC-->
            <transactionManager type="JDBC"></transactionManager> <!--数据源类型为POOLED-->
            <dataSource type="POOLED"> <!--从jdbc.properties中获取驱动、URL、用户名、密码-->
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.user}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--Mapper映射文件配置,将com.ding.dao包下的Mapper接口注册-->
    <mappers>
        <package name="com.ding.dao"/>
    </mappers>
</configuration>

测试类


public class StudentTest {
    InputStream stream = null;
    SqlSessionFactoryBuilder builder = null;
    SqlSessionFactory factory = null;
    SqlSession sqlSession = null;
    StudentDao studentDao = null;

    @Before
    public void setUp() throws Exception {
        // 读取MyBatis的配置文件
        stream = Resources.getResourceAsStream("mybatis.xml");
        builder = new SqlSessionFactoryBuilder();
        factory = builder.build(stream);
        sqlSession = factory.openSession();
        studentDao = sqlSession.getMapper(StudentDao.class);
    }

    // 根据学生ID查询学生信息
    @Test
    public void testSelectById() {
        Student student = studentDao.selectById(1);
        System.out.println(student);
    }

    // 查询所有学生的信息,并按照成绩从高到低排序
    @Test
    public void testSelectAllOrderByScore() {
        List<Student> students = studentDao.selectAllOrderByScore();
        students.forEach(System.out::println);
    }

    // 查询所有女学生的信息,并按照年龄从小到大排序
    @Test
    public void testSelectAllFemaleOrderByAge() {
        List<Student> students = studentDao.selectAllFemaleOrderByAge();
        students.forEach(System.out::println);
    }

    // 插入一个学生的信息
    @Test
    public void testInsert() {
        Student student = new Student();
        student.setName("Tom");
        student.setAge(20);
        student.setGender("male");
        student.setScore(90.0);
        studentDao.insert(student);
        System.out.println(student);
    }

    // 更新一个学生的信息
    @Test
    public void testUpdate() {
        Student student = studentDao.selectById(1);
        System.out.println("修改前:" + student);
        student.setScore(95.0);
        studentDao.update(student);
        Student acb = studentDao.selectById(1);
        System.out.println("修改后:" + acb);
        System.out.println(student);

    }

    // 删除一个学生的信息
    @Test
    public void testDeleteById() {
        studentDao.deleteById(1);
    }

    // 批量删除学生的信息
    @Test
    public void testDeleteBatch() {
        List<Integer> ids = Arrays.asList(2, 3, 4);
        studentDao.deleteBatch(ids);
    }
    @After
    public void distroy() throws IOException{
        sqlSession.commit();
        sqlSession.close();
        stream.close();
    }
}

以上是MyBatis的增删改查说明,开发人员可以根据实际需求选择适合自己的方式进行操作。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值