一、为什么学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依赖
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映射文件
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
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、映射文件
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
useGeneratedKeys="true"keyProperty="sno"> insert into student(sname,pwd,sex,age) values(#{sname},#{pwd},#{sex},#{age}) delete from student where sno=#{sno} update student set sname=#{sname} where sno=#{sno} select * from student select sname from student where sno=#{sno} 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 for(Studentstu:slist) { System.out.println(stu.getSname());; } session.commit();//提交事务 }catch(Exceptione) { e.printStackTrace(); session.rollback();//事务回滚 }finally{ session.close();//关闭资源 } } }4、功能测试