2、Mybatis之增、删、改、查

一、Mybaits之增、删、改、查

上一节已经介绍了Mybaits的搭建环境,下面演示Mybaits的增、删、改、查。以数据库中的users表为例,表中有id、name、age三个字段。
1、首先建立表对应的bean

package com.lzj.mybaits.test1;

public class User {
    private int id;
    private String name;
    private int age;

    public User() {
        super();
    }

    public User(int id, String name, int age) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
    }

}

2、定义sql的xml映射文件userMapper.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="com.lzj.mybaits.test1.userMapper">

    <!-- parameterType指定插入表时,传入的是一个User对象,需要把User对应的对象的属性的值插入到数据库中 -->
    <!-- values(#{id}, #{name}, #{age}中的id、name、age的名字一定要和User类中的属性的名字相同,根据反射,通过名字一一进行匹配的 -->
    <insert id="insertUser" parameterType="com.lzj.mybaits.test1.User">
        insert into users(id,
        name, age) values(#{id}, #{name}, #{age})
    </insert>

    <!-- parameterType指定删除表时,传入的是一个int类型数据 -->
    <!-- #{id}中的id名字不一定要与User中的id属性名相同,因为只传入了一个参数,不用一一对应 -->
    <delete id="deleteUser" parameterType="int">
        delete from users where
        id=#{id}
    </delete>

    <!-- parameterType指定更新表时,传入的是一个User对象,需要把User对应的对象的属性的值更新到数据库中 -->
    <!-- #{id}, #{name}, #{age}中的id、name、age一定要与User类中的属性名一一对应,通过反射把数据更新到表中 -->
    <update id="updUser" parameterType="com.lzj.mybaits.test1.User">
        update users set
        name=#{name},age=#{age} where id=#{id}
    </update>

    <!--resultType指定返回的类型为User类型-->
    <select id="getUser" parameterType="int" resultType="com.lzj.mybaits.test1.User">
        select *
        from users where id=#{id}
    </select>

    <select id="selectAllUser" resultType="com.lzj.mybaits.test1.User">
        select * from Users
    </select>

</mapper>

3、定义mybaits的配置文件conf.xml

<?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">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/lzj_database" />
                <property name="username" value="root" />
                <property name="password" value="lzjlzj" />
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/lzj/mybaits/test1/userMapper.xml"/>
    </mappers>

</configuration>

4、创建测试类
由于增、删、改、查都需要先获取SqlSessionFactory,所以先定义一个公共类MybaitsUtil ,用于获取SqlSessionFactory对象。

package com.lzj.mybaits.util;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.lzj.mybaits.test1.MybaitsTest;

public class MybaitsUtil {

    public static SqlSessionFactory getFactory(){
        String resource = "conf.xml";
        InputStream in = MybaitsTest.class.getClassLoader().getResourceAsStream(resource);
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        return factory;
    }

}

创建测试类,测试增、删、该、查

package com.lzj.mybaits.test1;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.lzj.mybaits.util.MybaitsUtil;

public class MybaitsTest {

    public static void main(String[] args) throws Exception {

//      testInsert();
//      testUpd();
//      testDelete();
//      testSelectOne();
        testSelectAll();

    }

    public static void testInsert(){
        SqlSessionFactory factory = MybaitsUtil.getFactory();
        /*默认设置手动提交事务的*/
        SqlSession session = factory.openSession();
        String statement = "com.lzj.mybaits.test1.userMapper.insertUser";
        int insertNum = session.insert(statement, new User(4, "zhangsan", 21));
        System.out.println("insertNum = " + insertNum);
        /*手动提交事务*/
        /*如果此处不想手动提交数据,可以在factory.openSession(true),表示插入数据时自动提交事务*/
        session.commit();
        /*关闭事务*/
        session.close();

    }

    public static void testUpd(){
        SqlSessionFactory factory = MybaitsUtil.getFactory();
        /*自动提交事务*/
        SqlSession session = factory.openSession(true);
        String statement = "com.lzj.mybaits.test1.userMapper.updUser";
        int updateNum = session.update(statement, new User(3, "lzj", 25));
        System.out.println("updateNum = " + updateNum);
        session.close();
    }

    public static void testDelete(){
        SqlSessionFactory factory = MybaitsUtil.getFactory();
        /*自动提交事务*/
        SqlSession session = factory.openSession(true);
        String statement = "com.lzj.mybaits.test1.userMapper.deleteUser";
        int deleteNum = session.delete(statement, 4);
        System.out.println("deleteNum = " + deleteNum);
        session.close();
    }

    public static void testSelectOne(){
        SqlSessionFactory factory = MybaitsUtil.getFactory();
        /*自动提交事务*/
        SqlSession session = factory.openSession(true);
        String statement = "com.lzj.mybaits.test1.userMapper.getUser";
        User user = session.selectOne(statement, 3);
        System.out.println(user);
        session.close();
    }

    public static void testSelectAll(){
        SqlSessionFactory factory = MybaitsUtil.getFactory();
        /*自动提交事务*/
        SqlSession session = factory.openSession(true);
        String statement = "com.lzj.mybaits.test1.userMapper.selectAllUser";
        List<User> list = session.selectList(statement);
        System.out.println(list);
        session.close();
    }
}

二、注意事项

1、<properties></properties>标签的用法
为了简化在conf.xml配置文件中的配置,可以在外面文件配置好,然后用<properties> 标签导入到conf.xml文件中,例如在src下创建db.properties文件,文件中配置数据源,如下所示

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/lzj_database
username=root
password=lzjlzj

然后在conf.xml配置中导入数据源的配置

<?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">
<configuration>

    <!--导入db.properties的配置文件,并在后面通过${}引用文件中键;也可以用properties标签的子标签property中的name和value覆盖db.properties文件中的键值对;
    resource表示从类路径下导入外部文件;
    url表示从网络或者磁盘中导入文件-->
    <properties resource="db.properties"></properties>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                <property name="username" value="${username}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper class="com.lzj.mybaits.test1.UserMapper"/>
    </mappers>

</configuration>

2、<typeAliases>标签的用法

  • typeAliases标签中typeAlias子标签

在sql的userMapper.xml映射文件中,书写增、删、改、查语句时,例如:

    <insert id="insertUser" parameterType="com.lzj.mybaits.test1.User">
        insert into users(id,
        name, age) values(#{id}, #{name}, #{age})
    </insert>

parameterType属性或其它属性中类型名过长,可以通过定义别名的形式来实现,在conf.xml配置文件中定义com.lzj.mybaits.test1.User的别名,如下所示:

<typeAliases>
        <typeAlias type="com.lzj.mybaits.test1.User" alias="userTest"/>  
</typeAliases>

在sql的映射文件userMapper.xml中就可以通过别名userTest来定义

    <insert id="insertUser" parameterType="userTest">
        insert into users(id,
        name, age) values(#{id}, #{name}, #{age})
    </insert>
  • typeAliases标签中package的子标签
    在书写sql的映射文件userMapper.xml时,
    <insert id="insertUser" parameterType="com.lzj.mybaits.test1.User">
        insert into users(id,
        name, age) values(#{id}, #{name}, #{age})
    </insert>

parameterType中包的名字太长,如果sql语句很多,书写不方便,可以在conf.xml配置文件中指定包,例如

    <typeAliases>
        <package name="com.lzj.mybaits.test1"/>
    </typeAliases>

指定包名后,在sql的映射文件userMapper.xml中就可以直接写类的名字,而不用带包名了。

    <insert id="insertUser" parameterType="User">
        insert into users(id,
        name, age) values(#{id}, #{name}, #{age})
    </insert>

这里写代码片工程目录如图所示
这里写图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值