mybatis的概念:
MyBatis是一款ORM模型,支持定制化 SQL、存储过程以及高级映射。可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
具有的特点:
半自动化:支持定制化 SQL、存储过程以及高级映射;
集成方便:不仅方便 Spring 等 JavaEE 框架的集成,
还与其他 ORM 模型集成也很方便。
mybatis映射器概念:
MyBatis框架包括两种类型的XML文件,一类是配置文件,即mybatis-config.xml,另外一类是映射文件,例如XXXMapper.xml等。在MyBatis的配置文件mybatis-config.xml包含了<mappers></mappers>节点,这里就是MyBatis映射器。
引入映射器的两种方式:
<mappers>
<!--第一种文件路径 -->
<!--<mapper resource="com/ape/mapper/TeacherMapper.xml "/> -->
<!--第二种类路径
1.将 sqlmapper文件对应的这个接口文件放在同一个包下
2.将 sqlmapper文件和对应的接口文件文件名改为一样的
3.将 sqlmapper 文件中namespace属性的值改为接口的类路径
-->
<!-- <mapper class="com.ape.mapper.StudentMapper"/> -->
<!--第三种包路径 -->
<package name="com.ape.mapper"/>
</mappers>
mybatis映射器分为:
Mapper接口开发需要遵循以下规范:
1. Mapper.xml文件中的namespace与mapper接口的类路径相同。
接口+xml映射器:
xml文件中namespace为接口地址 id为接口的方法名
xml文件:
<mapper namespace="com.ape.mapper.StudentMapper">
<insert id="add" parameterType="Student" keyProperty="sid" useGeneratedKeys="true">
insert into student(sname,birthday,ssex,classid,sid)
values(#{sname},#{birthday},#{ssex},#{classid},#{sid})
</insert>
</mapper>
接口文件:
public interface StudentMapper {
public int add(Student s);
//修改
}
注解+接口映射器:
public interface StudentMapper {
//注解 没有了xml文件 原先接口的方法名与xml文件中的id名相同,
xml文件中namespace为接口地址,
现在直接把接口名弄成id名保持在xml文件中的特性
@Select("select *from student")
public List<Student> selectStudent();
使用步骤:
<?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元素外部文件配置 value后跟¥{里面填写键} -->
<properties resource="jdbc.properties"></properties>
<typeAliases>
<!-- typeAliases起别名在com.ape.bean全部别名为类名(大小写无所谓) -->
<!-- 给每个类起别名 <typeAlias type="com.ape.bean.Student" alias="aa"/> -->
<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/mapper/TeacherMapper.xml "/> -->
<!-- 类路径
1.将 sqlmapper文件对应的这个接口文件放在同一个包下
2.将 sqlmapper文件和对应的接口文件文件名改为一样的
3.将 sqlmapper 文件中namespace属性的值改为接口的类路径
-->
<!-- <mapper class="com.ape.mapper.StudentMapper"/> -->
<!-- 包路径 -->
<package name="com.ape.mapper"/>
</mappers>
</configuration>
jdbc.properties:
jdbc.driver=com.mysql.cj.jdbc.Driver //驱动类
jdbc.url=jdbc:mysql://localhost:3306/myschool2?serverTimezone=GMT
服务器地址:端口/数据库名?参数名=参数值
jdbc.username=root //数据库账号
jdbc.password=123456 //密码
3.创建表的实体类
对应的字段名和类型 对应类中的数据类型名和数据类型
提供set()和get(),有参、无参构造方法以及toString()方法
4.创建mapper
用注解和xml文件都可以
5.编写测试类
public class lizhi{
public static void main(String[] args) throws Exception{
// 读取mybatis-config.xml文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
// 初始化mybatis,创建SqlSessionFactory类的实例
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建Session实例
SqlSession session = sqlSessionFactory.openSession();
//获得mapper接口的代理对象
StudentMapper sm = session.getMapper(StudentMapper.class);
// 直接调用接口的方法,查询id为1的Student数据
Student s2 = sm.selectStudent(1);
// 打印Peson对象
System.out.println(s2);
// 提交事务
session.commit();
// 关闭Session
session.close();
}
}