ORM框架-MyBatis(一)
一、为什么学MyBatis
1、发现问题
2、问题总结
二、MyBatis概述
1、概念
优秀的数据持久层框架,在实体类和sql之间建立映射关系,半自动化的ORM实现,
封装性低于Hibernate,性能优秀、小巧易学。
2、资源
https://mybatis.org/mybatis-3/zh/index.html
3、思想
程序和sql语句分离,配置扩展方便
4、架构
5、优缺点
优点:
a、小巧易上手,是最简单的持久化框架
b、程序与sql分离,管理、扩展、维护方便,可重用性强
c、提供XMl标签,支持编写动态sql
缺点:
a、sql语句编写量大,对编程人员sql功底有一定要求
b、由于sql语句依赖于数据库、导致数据库移植性差
三、快速入门和基本操作
1、创建项目
创建一个Maven项目,引入jar或POM依赖
<dependencies>
<!--加入mybatis依赖库 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
<!--加入mysql依赖库 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.10</version>
</dependency>
</dependencies>
2、编写配置文件
A、db.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ms
username=root
password=admin
B、mybatis.xml
a、加载db
b、取别名
c、配置MyBatis的多套运行环境
d、映射器-告诉MyBatis去哪里找到sql映射文件
<?xmlversion="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--引入db.propertis文件 -->
<propertiesresource="db.properties"/>
<!--给实体类取别名-->
<typeAliases>
<!--简化在mapper配置文件中使用 -->
<typeAliastype="com.ls.Student"alias="Student"/>
</typeAliases>
<!--配置MyBatis的多套运行环境-->
<environmentsdefault="dev">
<!--每一个environment关联一个连接 -->
<environmentid="dev">
<!--事务管理模式 (采用jdbc的事务管理)-->
<transactionManagertype="JDBC"/>
<!--配置数据源 -->
<!--POOLED:Mybatis自带数据源 -->
<dataSourcetype="POOLED">
<propertyname="driver"value="${driver}"/>
<propertyname="url"value="${url}"/>
<propertyname="username"value="${username}"/>
<propertyname="password"value="${password}"/>
</dataSource>
</environment>
</environments>
<!--映射器-告诉MyBatis去哪里找到sql映射文件 -->
<mappers>
<!--第1种方式-通过类资源路径获取-->
<mapperresource="com/ls/StudentMapper.xml"/>
<!--第2种方式-通过Url获取资源 -->
<!-- <mapper url="f:/pMapper.xml"/> -->
</mappers>
</configuration>
3、编写代码
A、实体类
publicclassStudent{
privateIntegersno;
privateStringpwd;
privateStringsname;
privateStringsex;
privateIntegerage;
privateIntegergid;
privateStringphone;
privateStringaddress;
publicIntegergetSno() {
returnsno;
}
publicvoidsetSno(Integersno) {
this.sno=sno;
}
publicStringgetPwd() {
returnpwd;
}
publicvoidsetPwd(Stringpwd) {
this.pwd=pwd;
}
publicStringgetSname() {
returnsname;
}
publicvoidsetSname(Stringsname) {
this.sname=sname;
}
publicStringgetSex() {
returnsex;
}
publicvoidsetSex(Stringsex) {
this.sex=sex;
}
publicIntegergetAge() {
returnage;
}
publicvoidsetAge(Integerage) {
this.age=age;
}
publicIntegergetGid() {
returngid;
}
publicvoidsetGid(Integergid) {
this.gid=gid;
}
publicStringgetPhone() {
returnphone;
}
publicvoidsetPhone(Stringphone) {
this.phone=phone;
}
publicStringgetAddress() {
returnaddress;
}
publicvoidsetAddress(Stringaddress) {
this.address=address;
}
}
B、映射文件
<?xmlversion="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mappernamespace="com.ls.entity.StudentMapper">
<!--1.增加用户 -->
<insertid="addStu"parameterType="stu"
useGeneratedKeys="true"keyProperty="sno">
insert into student(sname,pwd,sex,age) values(#{sname},#{pwd},#{sex},#{age})
</insert>
<!--2.删去用户 -->
<deleteid="deleteStuBySno"parameterType="int">
delete from student where sno=#{sno}
</delete>
<!--3.修改用户 -->
<updateid="updateStu"parameterType="stu">
update student set sname=#{sname} where sno=#{sno}
</update>
<!-- 4、查询所有 -->
<selectid="selectAll"resultType="stu">
select * from student
</select>
<!--5、查询单个 -->
<selectid="selectBySno"resultType="stu"parameterType="int">
select sname from student where sno=#{sno}
</select>
</mapper>
4、功能测试
A、步骤
a1、通过流的方式读取配置文件
a2、获得SqlSessionFactory对象
a3、获得SqlSession对象
a4、调用相关方法(增删改查)
a5、提交事务
a6、关闭资源
a7、代码
packagecom.ls.test;
importjava.io.InputStream;
importjava.util.List;
importorg.apache.ibatis.io.Resources;
importorg.apache.ibatis.session.SqlSession;
importorg.apache.ibatis.session.SqlSessionFactory;
importorg.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.ls.entity.Student;
public class TestMyBatis{
publicstaticvoidmain(String[]args){
SqlSessionsession=null;
try{
//1.通过流的方式读取myBatis.xml配置文件
InputStreamis=Resources.getResourceAsStream("mybatis.xml");
//2.创建SqlSessionFactory工厂对象
SqlSessionFactoryssf=newSqlSessionFactoryBuilder().build(is);
//3.得到SqlSession对象
session=ssf.openSession();
//【添加学生】
// Student stu = new Student();
// stu.setSname("轩轩");
// stu.setPwd("888");
// stu.setSex("男");
// stu.setAge(18);
// int num=session.insert("addStu",stu);
// if(num>0){
// System.out.println("add success!");
// }
//【删去学生】
// int num=session.delete("deleteStuBySno",22);
// if(num>0){
// System.out.println("delete success!");
// }
//【修改学生】
// Student stu = new Student();
// stu.setSname("轩轩");
// stu.setSno(21);
// int num=session.update("updateStu",stu);
// if(num>0){
// System.out.println("update success!");
// }
//【查询单个学生】
// Student stu=session.selectOne("selectBySno",20);
// System.out.println(stu.getSname());
//【查询所有学生】
List<Student>slist=session.selectList("selectAll");
for(Studentstu:slist) {
System.out.println(stu.getSname());;
}
session.commit();//提交事务
}catch(Exceptione) {
e.printStackTrace();
session.rollback();//事务回滚
}finally{
session.close();//关闭资源
}
}
}