mybatis使用总结 (基础)

ssm框架中学习过程中较简单的一个框架。

MyBatis (ibatis)是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。(百度百科)

也就是说mybatis使数据库sql语句与Java代码“分开”,降低耦合,并且对于数据库语句的书写也比传统的jdbc要简单许多。

使用

 

 

 

1. 创建一个maven项目,在pom文件中导入相关jar包依赖。获取mybatis,SQL server数据库驱动jar包

<dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.3</version>
 </dependency>

<dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <version>7.0.0.jre10</version>
</dependency>

 

2. 创建mybatis核心配置文件,mybatis-config.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="sql">
        <environment id="sql">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
                <property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=TestData"/>
                <property name="username" value="sa"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/cheng/dao/UserMapper.xml"/>
    </mappers>

</configuration>

Mybatis默认的事务管理器就是 JDBC , 连接池 : POOLED

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。

configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)

 

例:typeAliases(类型别名)设置

 <!-- 定义 别名 -->
    <typeAliases>

        <!--单个别名的定义  alias:别名,type:别名映射的类型  -->
        <!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> -->

        <!-- 批量别名定义
        指定包路径,自动扫描包下边的pojo,定义别名,别名默认为类名(首字母小写或大写)
         -->
        <package name="com.cheng.pojo"/>

    </typeAliases>

若批量定义别名后,mapper映射文件中。

       <-- 未定义别名-->
    <select id="getUserList" resultType="com.cheng.pojo.User">
       select * from sqldata
   </select>

    <insert id="addUser" parameterType="com.cheng.pojo.User">
        insert into sqldata (id,name,pwd) values(#{id},#{name},#{pwd});
    </insert>

    <--已定义别名 -->
    <select id="getUserList" resultType="User">
       select * from sqldata
   </select>

    <insert id="addUser" parameterType="User">
        insert into sqldata (id,name,pwd) values(#{id},#{name},#{pwd});
    </insert>

 

例:通过properties属性来实现引用配置文件(连接数据库)

连接SQL server数据库的 db.properties

driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://localhost:1433;databaseName=TestData
username=sa
password=123456

连接mysql数据库的 db.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc?useSSL=false&serverTimezone=UTC
username=root
password=123456

引用.properties文件

......
......
    <properties resource="db.properties"/>

    <environments default="sql">
        <environment id="sql">
            <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.XML都需要在Mybatis核心配置文件中注册!-->

<-- 方式一: 【推荐使用】-->
    <mappers>
        <mapper resource="com/cheng/dao/UserMapper.xml"/>
    </mappers>

<-- 方式一: 使用class文件绑定注册-->
<mappers>
    <mapper class="com.cheng.dao.UserMapper"/>
</mappers>

 

3. 编写mybatis工具类

//sqlSessionFactory --> sqlSession
public class MybatisUtils {

    private static SqlSessionFactory sqlSessionFactory;

    static{
        try {
            //使用Mybatis第一步:获取sqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    //既然有了 SqlSessionFactory,顾名思义,我们就可以从中获得 SqlSession 的实例了。
    // SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。
    public static SqlSession  getSqlSession(){
        return sqlSessionFactory.openSession();
    }

}

 

4. pojo层编写实体类,类实例域要与数据库中列中属性相对应,名称相同(不相同也可以

package com.cheng.pojo;

import lombok.*;

@Setter  //生成set方法,final变量不包含
@Getter  //生成get方法,final变量不包含
@AllArgsConstructor  //生成所有参数的构造方法
/*
@NoArgsConstructor  //生成无参构造方法
@ToString   //生成所有属性的toString()方法
@EqualsAndHashCode  //生成生成equals()方法和hashCode方法
@Data   //包括@Setter/@Getter,@ToString ,@EqualsAndHashCode,@RequiredArgsConstructor
@RequiredArgsConstructor    //生成一个包含 "特定参数" 的构造器,特定参数指的是那些有加上 final 修饰词的变量.
// 如果所有的变量都是正常的,都没有用 final 修饰的话,那就会生成一个没有参数的构造器
*/
public class User {
    private int id;
    private String name;
    private String pwd;

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

 

5. dao层接口,并编写映射文件 UserDao.xml(接口实现类由原来的UserDaoImpl转变为一个 Mapper配置文件)

package com.cheng.dao;

import com.cheng.pojo.User;

import java.util.List;

public interface UserDao {
    //查询全部信息
    List<User> getUserList();

    //根据id查询
    List<User> getUserListById(int id);

    //插入信息
    void addUser(User user);

    //修改用户
    void updateUser(User user);

    //删除用户
    void deleteUser(int id);

}

映射文件

  namespace中的包名要和 Dao/mapper 接口的包名一致!

  id : 就是对应的namespace中的方法名。

  resultType:Sql语句执行的返回值。

  parameterType : 参数类型。

<?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.cheng.dao.UserDao">

    <select id="getUserList" resultType="com.cheng.pojo.User">
       select * from sqldata
   </select>

    <select id="getUserListById" resultType="com.cheng.pojo.User" parameterType="int">
        select * from sqldata where id=#{id}
    </select>

    <insert id="addUser" parameterType="com.cheng.pojo.User">
        insert into sqldata (id,name,pwd) values(#{id},#{name},#{pwd});
    </insert>

    <update id="updateUser" parameterType="com.cheng.pojo.User">
        update sqldata set name=#{name},pwd=#{pwd} where id=#{id}
    </update>

    <delete id="deleteUser" parameterType="int">
        delete from sqldata where id=#{id};
    </delete>

</mapper>

 

单元测试

import com.cheng.pojo.User;
import com.cheng.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class JTest {

    @Test
    public void test(){
        //第一步:获得SqlSession对象
        SqlSession sqlSession;
        sqlSession = MybatisUtils.getSqlSession();

        //方式一:getMapper
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        List<User> userList = userDao.getUserList();

        for (User user : userList) {
            System.out.println(user);
        }

        //关闭SqlSession
        sqlSession.close();
    }

    @Test
    public  void test2(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        List<User> userListById = mapper.getUserListById(1);
        System.out.println(userListById);
        sqlSession.close();
    }

    //增删改需要提交事务
    @Test
    public  void test3(){
       SqlSession sqlSession =MybatisUtils.getSqlSession();
       UserDao userDao=sqlSession.getMapper(UserDao.class);
       userDao.addUser(new User(3,"YuQingSong","123456"));
       sqlSession.commit(); //提交事务
       sqlSession.close();
    }
}

 

posted @ 2020-08-07 21:18  裕轻松哈哈  阅读(274)  评论(0编辑  收藏  举报