一、什么是MyBatis?
MyBatis 是一款 半自动 的 ORM 模型,它支持定制化SQL、存储过程以及高级映射。
ORM模型:ORM 模型是数据库的表和简单 Java 对象的映射关系模型,主 要解决数据库数据和 POJO 对象的相互映射。
一个ORM模型包括:Java对象;映射配置;数据库。
MyBatis 可以通过XML配置文件或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后 将sql执行的结果再映射生成java对象。
二、为何使用MyBatis?
1,解决了JDBC中无法使用线程池导致系统资源浪费的问题;
2,解决了SQL语句在JDBC中不够灵活,修改麻烦的问题;
3,解决了在JDBC中SQL在不同条件下传参麻烦的问题;
4,解决了在JDBC中结果集解析麻烦的问题;
总的来说MyBatis有三大优点:
1,学习上手简单;
2,灵活度高;
3,功能完整;
三、如何使用MyBatis?
①首先需要去官网下载MyBatis的jar包,MySQL驱动包和xml配置文件
建立项目结构,将对应的jar包和配置文件放到相应的文件夹里,jar包记得buildpath。
② 配置文件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>
<!-- 配置数据库环境信息,default默认使用的数据库环境-->
<environments default="development">
<!-- 单个数据库环境信息的标识-->
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池,配置环境信息中数据源连接的信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/myschool?serverTimezone=GMT" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/ape/mapper/StudentMapper.xml"/>
</mappers>
</configuration>
还有一种扩展引用外部文件来配置
这里的最下面有一个mapper属性很重要,用来在MyBatis初始化的时候引入映射器。
mapper又有一个动态代理的功能,在接口中有方法的返回值定义,参数的定义,方法名,在sqlMapper.xml 中也对应这接口给予了赋值, 这时候dao的实现类就显得多余,这是Mybatis可以帮助我们自动产生实现类,并可以调取方法得到结 果,这就是Mybatis的mapper动态代理。
怎么实现动态代理?
1,将Sqlmapper文件对应的接口放在同一包下;
2,将Sqlmapper文件名和接口文件名改成一致的;
3,将Sqlmapper文件中的namespace属性的值改为接口的类路径
4,接口中的方法名sqlmapper的id一样,才能找到要执行sql语句
5,接口的返回值的类型要和sqlmapper中的resultType类型要一致(每个元素的类型)
6,接口中入参 类型要和sqlmapper中parameterType类型要一致
完成以上步骤才能使用动态代理;
四,编译代码;
配置完毕后,我们就可以将数据库增删改查代码写在我们通过动态代理创建的与接口名同名的xml文件里面了
增删改查用不同的标签。
最后就是在我们的Java中创建SqlSession
还有一种方式叫做注解,注解可以用来书写简单的sql语句,这样就省去了去写xml的步骤,直接在接口里写sql语句。
package com.ape.Mapper;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.ape.Bean.Student;
public interface StudentMapper {
@Select("select * from student ")
public List<Student> findAllStu();
public List<Student> findAllStu(@Param("aa")int c,int s);
@Insert("insert into student(sname,ssex,birthday,classid) values(sname,ssex,birthday,classid)")
@Options(keyProperty = "sid", useGeneratedKeys = true)
public int addStudent(Student s);
@Update("update student set sname=#{sname},ssex=#{ssex},birthday=#{birthday},classid=#{classid} where sid=#{sid}")
public int updateStudent(Student s);
@Delete("delete from student where sid=#{v}")
public int deleteStudent(int a);
@Results({
@Result(column ="classid",property = "classid"),
@Result(column ="classid",one = @One(select ="com.ape.Mapper.BjMapper.findBjbyclassid"),property ="bj")
})
@Select("select * from student")
public List<Student> findStuandClass();
}
以上就是MyBatis的大致配置和用法。