目录
什么是MyBatis
MyBatis是一款ORM模型,支持定制化 SQL、存储过程以及高级映射。可以使用简单的 XML
或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
映射器的组成:
SQL语句映射(<select>,<insert>,<delete>,<update>)
关系映射(<sql>,<parameterMap>,<resultMap>)
MyBatis中的映射分类:
XML配置文件、注解
MyBatis的特点:
简单易学、灵活度高、功能完整、半自动化、集成方便
mybatis 解决了jdbc 的问题:
JDBC的弊端
硬编码、SQL参数固定、代码重复度高、底层技术
解决方法:
1.在SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库链接。
2.将Sql语句配置在XXXXmapper.xml文件中与java代码分离。
3.Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。
4.Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。
mapper动态代理
Mybatis可以帮助我们自动产生实现类,并可以调取方法得到结果,这就是Mybatis的mapper动态代理;
实现方法:
1. 接口方法名要和 sqlmapper 的id名一样 能找到要执行的sql语句
2. 接口返回值的类型 要和 sqlmapper中 resultType 类型要一致(每个元素的类型)
// selectList selectOne
3. 接口中入参的类型 要和 sqlmapper 中 parameterType类型要一致
4.sqlmapper中的namescpace 的值要和 接口的类路径要一致
5. 接口要和sqlmapper 放在同一个包下
6. 接口的名字 要和 sqlmapper 文件名要一致
注:
mybatis 不支持重载,id不能重复
mybatis 传参只能传一个,只有一个parameterType
MyBatis快速开始
1.引入 mybatis-config.xml 配置文件
2.引入 Mapper 映射文件
3.创建 MyBatisUtil 类
4.创建 SqlSession 类访问数据库
5.输出结果
例:
//读取主配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
//通过sqlSession工厂构建类构建sqlSession工厂
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
//生产SqlSession对象
SqlSession sqlSession = build.openSession();
System.out.println("请输入要查询的学生对象");
int sid=input.nextInt();
//执行sql语句并得到结果
Student s = sqlSession.selectOne("zhaodaoxuesheng", sid);
//业务
System.out.println(s);
//释放资源
sqlSession.close();
主配置文件代码
<?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="jdbc.properties"></properties>
<typeAliases>
<package name="com.ape.bean"/>
</typeAliases>
<!-- 和spring整合后 environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- <mapper resource="com/ape/mappre/studentmappre.xml"/> -->
<package name="com.ape.mapper"/>
</mappers>
</configuration>
XML配置文件映射:
在XML文件中写SQL语句:
<?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.ape.mapper.MasterMapper">
<resultMap type="Master" id="aaa">
<id column="Smid" property="smid"/>
<result column="sm_name" property="smname"/>
<result column="smsex" property="smsex"/>
</resultMap>
<!-- 全查 -->
<select id="selectMaster" resultMap="aaa">
select smid,sm_name,smsex from schoolmaster
</select>
<!-- 增加 -->
<insert id="addMaster" parameterType="Master">
insert into schoolmaster(sm_name,smsex) values(#{smname},#{smsex})
</insert>
</mapper>
注解
注解的分类:
1.基本注解
@Insert、@Delete、@Update、@Select
2 .结果映射注解
@Results
3.动态SQL注解
1.脚本SQL
2.方法中构建sql
@SelectProvider、@InsertProvider、@UpdateProvider、@DeleteProvider
3.SQL 语句构造器
例:
public interface StudentMapper {
//查询
//全查
@Select("select * from Student")
public List<Student> findAllStudent();
//根据id查询
public Student findAllStudentBySid(int sid);
// @param
@Select("select * from Student where ssex=#{ssex} limit #{aa},#{bb}")
public List<Student> findAllStuP(@Param("aa") int a,@Param("bb") int b,@Param("ssex") String ssex);
//新增
@Insert("insert into Student(sname,birthday,ssex,classid) values(#{sname},#{birthday},#{ssex},#{classid})")
@Options(keyProperty = "sid",useGeneratedKeys = true)
public int addStudent(Student s);
}