Mybatis 一个小操作

Mybatis

一、什么是Mybatis?

MyBatis的前身是iBatis,本是Apache的一个开源的项目,它是一个数据持久层(ORM)框架,把实体类和SQL语句之间建立了映射关系,是一种半自动化的ORM实现。MyBatis小巧,简单易学。与JDBC相比,减少了50%以上的代码量;它是最简单的持久化框架,小巧并简单易学;SQL代码从程序代码中彻底分离,可重用;提供XML标签,支持编写动态SQL。缺点是:SQL语句编写工作量大,对开发人员有一定要求;数据库移植性差。

二、Mybatis安装配置

(1)导入Mybatis依赖

​ (MyBatis的jar包下载地址:https://github.com/mybatis/mybatis-3/releases)

<dependencies>
    <!-- 用于通过注解生成一些固定代码 -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>x.x.x</version>
    </dependency>
    
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>x.x.x</version>
    </dependency>

     <!-- 引入单元测试日志依赖 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>x.x.x</version>
    </dependency>

    <!-- 引入logback日志依赖 -->
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>x.x.x</version>
    </dependency>

    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>x.x.x</version>
	</dependency>
 </dependencies>

(2)项目搭建

打开IDER,选择创建maven项目,选择org.app.maven.archetyypes:maven-archetype-quickstart模板进项创建Mybatis项目。然后对项目目录进行完善。

①在src/main/java/com.lanou3g.mybatis包下建立bean文件夹,用于存放与数据库相互映射的实体类;建立dao文件夹,用于存放定义的接口;

②在src/main目录下建立resources资源文件夹,用于存放配置文件。

③在test/java/com.lanou3g.test目录下建立AppTest类,用于进行单元测试。

三、使用MyBatis

(1)在resources文件夹下新建mybatis_conf.xmla配置文件进行对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>
   //引入外部的properties文件,只能引入一个
    <properties resource="jdbc.properties" /> 
    //这个配置使全局的映射器启用或禁用缓存
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    
    //定义类型别名(全局),在所有的Mapper.xml中都可以用
    <typeAliases>
        <typeAlias type="com.lanou3g.mybatis.bean.Teacher" alias="Teacher" />
    </typeAliases>
    //配置多套环境的数据库连接参数(如:开发环境、生产环境)
    <environments default="lanou">
    <environment id="lanou">
        	//事务管理器:
           // MANAGED: 这个配置就是告诉mybatis不要干预事务,具体行为依赖于容器本身的事务处理逻辑。
           // JDBC: 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。       
        <transactionManager type="MANAGED"/>
        <dataSource type="POOLED">
            <property name="driver" value="${jdbc.driver}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.user}"/>
            <property name="password" 				value="${jdbc.password}"/>
        </dataSource>
    </environment>
</environments>
//mapping 文件路径配置
    <mappers>
        <mapper resource="mapper/TeacherMapper.xml" />
    </mappers>
</configuration>

(2)在resources文件夹中新建jdbc.properties配置文件,用于存放数据库连接的相关信息。

jdbc.url=jdbc:mysql://localhost:3306/yanfa5?characterEncoding=utf8
jdbc.driver=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=root

(3)创建实体类,字段名要和数据库字段名一致;

package com.lanou3g.mybatis.bean;

import lombok.Getter;
import lombok.Setter;

import java.util.List;

@Getter
@Setter
public class Teacher {
    private Integer id;
    private String tname;
    private Integer age;
    private List<Student> students;

    public Teacher (){}

    public Teacher(String tname) {
        this.tname = tname;
    }

    @Override
    public String toString() {
        return "{" +
                "id:" + id +
                ", tname:'" + tname + '\'' +
                ", age:'" + age + '\'' +
                ", 所教学生:[" + students + '\'' +
                "]}\n";
    }
}

(4)在dao层创建接口,接口中为抽象类。

package com.lanou3g.mybatis.dao;
import com.lanou3g.mybatis.bean.Teacher;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface TeacherDao {
    List<Teacher> queryAll();
    /**
     * 多参数查询
     * @param id
     * @param age
     * @return
     */
    List<Teacher> queryByIdAndAge(@Param("tid") int id, @Param("age") int age);
}

(5)sql映射文件的配置;

在resources资源目录下新建mapper文件夹,用于存放sql映射文件。创建一个与你在src资源文件夹dao层下同接口类名的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对应空Dao接口的全名 
<mapper namespace="com.lanou3g.mybatis.dao.TeacherDao">
    <resultMap id="teacher" type="Teacher">
        <id column="t_id" property="id" />
        <result column="tname" property="tname" />
        <result column="age" property="age" />
        <collection property="students" ofType="Student">
            <id column="s_id" property="id" />
            <result property="sname" column="sname" />
            <result property="nickName" column="nick_name" />
        </collection>
    </resultMap>
    
    //此处的id是查询语句的名称,对应接口中的方法名
    <select id="queryAll" resultType="Teacher">
        select * from teacher;
      </select>
    //带两个参数,需要在接口中通过@Param注解指定名称(因为编译时参数名不会保留)
    <select id="queryByIdAndAge" resultType="Teacher">
        select * from teacher where id = #{id} and age &lt;= #{age};
    </select>
</mapper>

四、在Test/java文件夹下的AppTest类中进行单元测试

package com.lanou3g.spring;
/**
 * Unit test for simple App.
 */
@Slf4j
public class AppTest {
    // 1. 读入配置文件
String confPath = "mybatis_conf.xml";
InputStream in = Resources.getResourceAsStream(confPath);

// 2. 构建SqlSessionFactory(用于获取sqlSession)
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);

// 3. 获取sqlSession对象(用于具体的CRUD)  !如果需要提交数据的话,需要设置autocommit
SqlSession sqlSession = sessionFactory.openSession(true);
    
 // xml方式测试
TeacherDao TeacherDao
    =  sqlSession.getMapper(TeacherDao.class);
    
    /**
     * 练习查询多个库(用到了多环境配置)
     */
    @Test
        // 查询教师表
        List<Teacher> teacherList = teacherDao.queryAll();
        log.info("teacherList: " + teacherList);
    }

    /**
     * 多个参数查询语句
     */
    @Test
    public void testQueryByIdAndAge() {
        List<Teacher> teacherList = teacherDao.queryByIdAndAge(6, 99);
        log.info("查询结果:" + teacherList);
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值