MyBatis--核心配置文件--映射文件--单表增删改查--编写规范

MyBatis学习01

一、mybatis配置文件
1、核心配置文件:sqlMapConfig.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>

    <!--引入数据源配置文件  -->
    <properties resource="db.properties"></properties>

    <!-- 可以在控制台输出日志信息:sql语句和参数 -->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <!-- 配置别名-->
    <typeAliases>
        <!-- 配置每种类型的别名,type属性表示别名对应的类型地址,alias表示起的别名-->
        <typeAlias type="java.util.List" alias="list"/>
        <!-- package表示包,利用包的形式进行扫描包之下的所有的类,别名就是当前类名 -->
        <package name="com.java.model"/>
    </typeAliases>

    <!-- 环境配置:作为连接数据库的环境(可配置不同的数据库) -->
    <environments default="mysql">
        <environment id="mysql">
            <!--事务管理-->
            <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表示代理模式扫描 ,目的主要是在当前配置文件中扫描到sql映射文件-->
    <mappers>
        <mapper resource="mapper/EmpMapper.xml"/>
    </mappers>
</configuration>
2、Mapper接口映射配置文件:xxxMapper.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属性表示当前代理的命名空间,属性值为mapper接口地址,相当于mapper接口实现类 -->
<mapper namespace="com.java.mapper.EmpMapper">

    <!--要查询的sql字段-->
    <sql id="empSQL">
        number,name,job,mgr,hiredate,sal,comm,deptno
    </sql>

    <!--查询所有记录-->
    <select id="selectAllEmp" resultType="EmpEntity">
        SELECT <include refid="empSQL"/> FROM emp
    </select>

    <!--新增一条员工记录-->
    <!--#{}中的参数,必须是实体类中的属性名-->
    <insert id="insertEmp" parameterType="EmpEntity">
        INSERT  INTO emp VALUES  (null,#{name},#{job},#{mgr},#{hiredate},#{sal},#{comm},#{deptno})
    </insert>

    <!--根据员工编号删除员工记录-->
    <delete id="deleteEmpByNumber" parameterType="integer">
        DELETE FROM emp WHERE number = #{number}
    </delete>

    <!--根据员工编号修改员工信息-->
    <update id="updateEmpByNumber" parameterType="EmpEntity">
        UPDATE emp SET name = #{name}, job = #{job} WHERE number = #{number}
    </update>
</mapper> 
3、db.properties数据源文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/zhiheng?useSSL=true
username=root
password=Root
二、mybatis进行单表的增删改查
1、pom.xml引入mybatis相关依赖
<!--测试-->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
</dependency>

<!--mybatis-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.6</version>
</dependency>

<!--mysql-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.40</version>
</dependency>
2、mapper接口
package com.java.mapper;

import com.java.model.EmpEntity;

import java.util.List;

public interface EmpMapper {

    /**
     * 查询所有员工记录
     * @return
     */
    List<EmpEntity> selectAllEmp();

    /**
     * 新增一条员工记录
     * @param emp
     * @return
     */
    Integer insertEmp(EmpEntity emp);

    /**
     * 根据员工编号删除员工记录
     * @param number
     * @return
     */
    Integer deleteEmpByNumber(Integer number);

    /**
     * 根据员工编号修改员工信息
     * @param emp
     * @return
     */
    Integer updateEmpByNumber(EmpEntity emp);
}
3、测试类(创建sqlSession对象、代理开发、调用接口中的方法)
package com.java;

import com.java.mapper.EmpMapper;
import com.java.model.EmpEntity;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

/**
 * @author Liushun
 * @date Created in 2018/10/4 21:36
 * @description	mybatis测试类
 */
public class EmpTest {
    
    // SqlSession中封装了对数据库的操作,如:查询、插入、更新、删除等
    private SqlSession sqlSession = null;

    // 开启sqlSession会话
    @Before
    public void init() throws IOException {
        // 1、加载核心配置文件sqlMapConfig.xml
        InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");
        // 2、创建sqlSessionFactory会话工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(is);
        // 由会话工厂创建sqlSession即会话
        sqlSession = factory.openSession();
    }

    // 新增一条员工记录
    @Test
    public void addEmp(){
        EmpEntity emp = new EmpEntity();
        emp.setName("齐天大圣");
        emp.setComm(10000D);
        sqlSession.getMapper(EmpMapper.class).insertEmp(emp);
    }

    // 查询所有员工记录
    @Test
    public void selectAllEmp(){
        sqlSession.getMapper(EmpMapper.class).selectAllEmp();
    }

    // 根据员工编号删除员工记录
    @Test
    public void deleteEmp(){
        sqlSession.getMapper(EmpMapper.class).deleteEmpByNumber(1032);
    }

    // 根据员工编号修改员工信息
    @Test
    public void update(){
        EmpEntity emp = new EmpEntity();
        emp.setNumber(1030);
        emp.setName("姜子牙");
        emp.setJob("军师");
        sqlSession.getMapper(EmpMapper.class).updateEmpByNumber(emp);
    }
	
    @After
    public void destory(){

        if(sqlSession != null){
            try{
                // 提交事务
                sqlSession.commit();
            }catch (Exception e){
                // 有异常,回滚事务
                sqlSession.rollback();
            }finally{
                // 关闭sqlSession
                sqlSession.close();
            }
        }
    }
}
三、mybatis小结
1、mybatis解决jdbc编程的问题
  1. 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。

    解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。

  2. Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

    解决:将Sql语句配置在xxMapper.xml文件中与java代码分离。

  3. 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

    解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。

  4. 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。

    解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。

2、Mapper接口开发需要遵循以下规范
  1. Mapper.xml文件中的namespace与Mapper接口的路径相同

  2. Mapper接口方法名和Mapper.xml中定义的每个statement的id相同

  3. Mapper 接口方法的输入参数类型和Mapper.xml中定义的每个sql的parameterType的类型相同

  4. Mapper接口方法的输出参数类型和Mapper.xml中定义的每个sql的resultType的类型相同

3、typeAliases——类型别名映射关系
别名映射的类型
_bytebyte
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringString
byteByte
longLong
shortShort
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
dateDate
decimalBigDecimal
bigdecimalBigDecimal
mapMap
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值