java之mybatis之使用mybatis实现crud操作

Posted vincent-yuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java之mybatis之使用mybatis实现crud操作相关的知识,希望对你有一定的参考价值。

目录结构:

技术图片

 

1.封装 mybatis 的工具类:

MybatisUtil.java

public class MybatisUtil 
    private static SqlSessionFactory getSqlSessionFactory() throws IOException
        Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
        return  new SqlSessionFactoryBuilder().build(reader);
    
    public static SqlSession getSqlSession() throws IOException
        //填写参数 true表示事务自动提交
        return getSqlSessionFactory().openSession(true);
    

2.vo类

User.java

技术图片
 1 public class User implements Serializable
 2     private int id;
 3     private String name;
 4     private int age;
 5     public int getId() 
 6         return id;
 7     
 8     public void setId(int id) 
 9         this.id = id;
10     
11     public String getName() 
12         return name;
13     
14     public void setName(String name) 
15         this.name = name;
16     
17     public int getAge() 
18         return age;
19     
20     public void setAge(int age) 
21         this.age = age;
22     
23     @Override
24     public String toString() 
25         return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
26     
27 
View Code

3.映射文件

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">
<!-- 
    namespace用来指定映射文件的命名空间,在这里通过namespace可以找到该空间下的所有的
    sql语句映射。namespace的命名通常和应该映射文件所在【包名+映射文件名】
 -->
<mapper namespace="cn.sxt.vo.UserMapper">
    <select id="findAll" resultType="User">
        select * from t_user
    </select>

    <!-- select用来编写查询的sql语句  id在同一个namespace下是唯一的。
        parameterType用来指定参数类型
        #id 占位符 输入参数将会填充。建议和参数名要相同
        resultType 用来指定返回值类型
     -->
    <select id="selectUser" parameterType="int" resultType="User">
        select * from t_user where id = #id
    </select>
    <!-- insert用来映射插入语句 
        useGeneratedKeys 为true表示使用主键自增策略
        parameterType用来指定参数类型
        占位符中的 名称是参数的属性名,并且要提供get/set方法
    -->
    <insert id="insertUser" useGeneratedKeys="true" parameterType="User">
        insert into t_user(name,age) values(#name,#age)
    </insert>
    <!-- delete 用来指定删除语句 -->
    <delete id="deleteUser" parameterType="int">
        delete from t_user where id=#id
    </delete>
    <!-- update 用来指定更新语句 -->
    <update id="updateUser" parameterType="User">
        update t_user set name=#name,age=#age where id=#id
    </update>
</mapper>

 4.核心配置文件

mybatis.cfg.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>
    <!-- 它们都是外部化,可替代的属性。可以配置在一个典型的Java 属性文件中,或者通过
        properties 元素的子元素进行配置 -->
    <properties resource="jdbc.properties"></properties>
    <!-- 别名是一个较短的Java 类型的名称。用来设置别名 -->
    <typeAliases>
        <!-- 为指定的包下所有类设置别名,别名默认为类名 -->
        <package name="cn.sxt.vo"/>
        <!-- 为指定的类型设置别名 
        <typeAlias type="cn.sxt.vo.User" alias="User"/>
        -->
    </typeAliases>
    <!-- MyBatis 能够配置多套运行环境,这有助于将您的SQL 映射到多个数据库上。例如,在您的
    开发、测试、生产环境中,您可能有不同的配置。
        default指向默认使用的环境
     -->
    <environments default="development">
        <environment id="development">
            <!-- 
                JDBC – 这个配置直接使用JDBC 的提交和回滚功能。它依赖于从数据源获得连接来管理
                事务的生命周期。
                • MANAGED – 这个配置基本上什么都不做。它从不提交或者回滚一个连接的事务。而是让
                容器(例如:Spring 或者J2EE 应用服务器)来管理事务的生命周期。
             -->
            <transactionManager type="JDBC" />
            <!-- 
                UNPOOLED – 这个类型的数据源实现只是在每次需要的时候简单地打开和关闭连接。
                POOLED – 这个数据源的实现缓存了JDBC 连接对象,用于避免每次创建新的数据库连接时都初始
                化和进行认证,加快程序响应。并发WEB 应用通常通过这种做法来获得快速响应。
                JNDI – 这个数据源的配置是为了准备与像Spring 或应用服务器能够在外部或者内部配置数据
                源的容器一起使用,然后在JNDI 上下文中引用它。
             -->
            <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>
        <!-- sql语句的映射文件配置 -->
        <mapper resource="cn/sxt/vo/UserMapper.xml"/>
    </mappers>
</configuration>

jdbc.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=1111

5.测试

MybatisTest.java

public class MybatisTest 
    @Test
    public void testAdd() throws IOException
        User user = new User();
        user.setName("刘德华");
        user.setAge(55);
        SqlSession session = MybatisUtil.getSqlSession();
        //增 删  改  返回值为受影响的行数
        session.insert("cn.sxt.vo.UserMapper.insertUser", user);
        session.close();
    
    @Test
    public void testUpdate() throws IOException
        SqlSession session = MybatisUtil.getSqlSession();
        User user=session.selectOne("cn.sxt.vo.UserMapper.selectUser", 1);
        user.setName("彰五金");
        session.update("cn.sxt.vo.UserMapper.updateUser",user);
        session.close();
    
    @Test
    public void testDelete() throws IOException
        SqlSession session = MybatisUtil.getSqlSession();
        session.delete("cn.sxt.vo.UserMapper.deleteUser", 3);
        session.close();
    
    @Test
    public void testFindAll() throws IOException
        SqlSession session = MybatisUtil.getSqlSession();
        List<User> list = session.selectList("cn.sxt.vo.UserMapper.findAll");
        for(User u:list)
            System.out.println(u);
        
        session.close();
    

 

以上是关于java之mybatis之使用mybatis实现crud操作的主要内容,如果未能解决你的问题,请参考以下文章

初探MyBatis之HelloWorld

MyBatis精通之路之分页功能的实现

透彻理解MyBatis设计思想之手写实现

java框架之MyBatis

[Interview]Java 面试宝典系列之 MyBatis

Java框架之Mybatis