Mybatis初学及使用

2021/7/21 23:36:04

本文主要是介绍Mybatis初学及使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

什么是Mybatis?

​ 它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低。Mybatis也是SSM中唯一一个官方有中文文档的框架。
文档地址:https://mybatis.org/mybatis-3/zh/index.html

学Mybatis的作用

​ 可以简化对数据库操作的动作、简化了JDBC操作、可以灵活的操作数据库、操作事务。

Mybatis使用

搭建Mybatis环境

​ Mybatis是操作数据库的框架、要使用Mybatis得先有个库才能玩起来!所以我们得先弄个存储数据的数据表!

//创建数据库
create database mybatis
use mybatis

//创建用户表
create table user(
	id int,
    name varchar(20),
    paw varchar(20)
)

//插入数据
insert into user values(1,'刘德华','666666'),(2,'张学友','888888'),(3,'彭于晏','686868');

创建maven项目

​ 接下来是Java这边的环境搭建、创建maven项目、导入相关jar包、jar包最好用稳定的版本、一味追求高版本是在替后人找bug。

<!--mybatis包-jar -->
<dependency>
   <groupId>org.mybatis</groupId>
   <artifactId>mybatis</artifactId>
   <version>3.5.2</version>
</dependency>

<!--数据库连接驱动jar -->
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.47</version>
</dependency>

<!--单元测试jar -->
 <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
 </dependency>

编写配置Mybatis核心配置文件

<?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/mybatis"/>
               <property name="username" value="root"/>
               <property name="password" value="123456"/>
           </dataSource>
       </environment>
   </environments>
    <!-- 映射配置文件,SqlMapper.xml配置文件下主要是配置对数据库的操作 -->
   <mappers>
       <mapper resource="com/ling/dao/SqlMapper.xml"/>
   </mappers>
</configuration>

创建工具类将配置文件加载进Mybatis的SqlSessionFactoryBuilder类中构建出SqlSessionFactory,从SqlSessionFactory中获取SqlSession,SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。

public class MybatisUtils {

    private  static SqlSessionFactory sqlSessionFactory;

    static {

        String resource = "mybatis_config.xml";
        try {
            InputStream input = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //开启会议、返回一个会议得以操作数据库
    public static SqlSession getSession(){
        return sqlSessionFactory.openSession();
    }
}

创建一个用户实体类对象

public class User {
    private Integer id;
    private String name;
    private String pw;

    public User() {
    }

    public User(Integer id, String name, String pw) {
        this.id = id;
        this.name = name;
        this.pw = pw;
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getPw() {
        return pw;
    }

    public void setPw(String pw) {
        this.pw = pw;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pw='" + pw + '\'' +
                '}';
    }
}

创建dao层操作接口,先来个CRUD(增删改查)操作

public interface UserDao {
	//查询所有用户
    public List<User> selectUser();
    //添加用户
    public int addUser(User user);
    //删除用户
    public int deleteUser(int id);
    //修改用户
    public int updateUser(User user);
}

接下来就是编写刚刚的Mybatis核心配置文件中的映射文件,数据库操作配置文件,主要的操作还是在这个配置文件里,上面的接口只是媒介方便我们调用。

<?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.ling.dao.UserDao">
    <!-- 查询所有用户信息,返回类型resultType-->
            <select id="selectUser" resultType="com.ling.pojo.User">
          select * from user
         </select>

    <!--添加一个用户-->
    <insert id="addUser" parameterType="com.ling.pojo.User" >
        insert into user values(#{id},#{name},#{pw})
    </insert>

    <!--修改一个用户信息-->
        <update id="deleteUser" parameterType="int" >
            delete from user where id = #{id}
        </update>

    <!--删除一个用户-->
    <delete id="updateUser" parameterType="com.ling.pojo.User" >
         update user set name = #{name},pw = #{pw} where id = #{id}
    </delete>
</mapper>
  • namespace 十分重要,不能写错!
    • namespace的值绑定的是dao层数据库操作接口、从而可以在调用接口方法时相当于调用配置文件中相对应的操作。(初学Mybatis理解,往后学了Mybatis就不是这么想了可能)
    • 映射中不同的标签对应着不同的操作。
  • parameterType的值对应着参数类型
  • resultType的值对应着返回类型
  • 操作标签的id值必须得跟接口的方法相对应,不然调用不上
  • #{}是拿参数的值、如果参数是对象的话可以直接拿到对象中的属性值、如果是基本类型就通过参数名直接拿到参数。

最后测试操作

//获取session
    SqlSession session = MybatisUtils.getSession();
    //由session得到相对的映射
    UserDao mapper = session.getMapper(UserDao.class);
    /*
    测试查询所有用户
    * */
    @Test
    public void selectuser(){
        //操作映射中对应的执行方法
        List<User> users = mapper.selectUser();
        for (User s:users) {
            System.out.println(s.toString());
        }
    }
    /*
    测试添加用户
    * */
    @Test
    public void adduser(){
        //操作映射中对应的执行方法
        User user = new User(4, "黄凯芹", "123456");
        int i = mapper.addUser(user);

        System.out.println(i == 1? "添加成功!":"添加失败!");

        //提交事务
        session.commit();
        //关闭内存
        session.close();
    }
    /*
    测试查询所有用户
    * */
    @Test
    public void updateUser(){
        //操作映射中对应的执行方法
        User user = new User(3, "刘德华", "68686");
        int i = mapper.updateUser(user);
        System.out.println(i == 1 ? "修改成功!":"修改失败!");

        session.commit();
        session.close();

    }
    /*
    测试查询所有用户
    * */
    @Test
    public void deleteUser(){
        //操作映射中对应的执行方法
        int i = mapper.deleteUser(4);
        System.out.println(i == 1? "删除成功!":"删除失败!");

        session.commit();
        session.close();
    }
Caused by: java.io.IOException: Could not find resource com/ling/dao/SqlMapper.xml

注意点:增、删、改操作需要提交事务!不提交事务的话操作将无法在数据库生效、程序返回的提示并不能说明已经成功修改数据库、要数据库发生改变才是。

可能出现Maven静态资源过滤问题、出错代码类似

Caused by: java.io.IOException: Could not find resource com/ling/dao/SqlMapper.xml

出现这个问题就在项目的pox文件中加入以下代码

<resources>
   <resource>
       <directory>src/main/java</directory>
       <includes>
           <include>**/*.properties</include>
           <include>**/*.xml</include>
       </includes>
       <filtering>false</filtering>
   </resource>
   <resource>
       <directory>src/main/resources</directory>
       <includes>
           <include>**/*.properties</include>
           <include>**/*.xml</include>
       </includes>
       <filtering>false</filtering>
   </resource>
</resources>

如有错漏地方望指点!



这篇关于Mybatis初学及使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程