粗略步骤
1.mybatis-3.4.6.jar、 mysql-connector-java-8.0.19.jar
2.conf.xml (数据库配置信息)
3.表、类、映射文件mapper.xml、对应接口、修改配置信息
4.测试
学习视频:https://www.bilibili.com/video/BV1gs411j7kA?p=5
详细步骤
1. 建立项目 导包
mybatis-3.4.6.jar、 mysql-connector-java-8.0.19.jar
File->Project Structure->Modules->Dependencies->右侧加号->1.jar ,然后选中要导入的那个包。
2.在数据库中建立表,在idea中建立对应的类。
假设表student有三个属性 sno,sname,sage
建立类Student 也有三个属性(现在的类中属性名和表中的列名一致,如果名字不一样需要额外的配置),然后建立无参构造方法
,有参构造方法,set get方法
3.建立映射关系StudentMapper.xml,创建接口StudentMapper.class,配置conf.xml 文件
(1)映射关系StudentMapper.xml(建立在src下面的mapper包中 在里面可以写sql语句 )
1)<?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">
这些是不变的
2 )
说明:
a.namespace 是接口StudentMapper.class的全类名
b.在查询中 resultType是输出参数 parameterType是输入参数(因为规定输入和输出参数都只能有一个,
所以尽管查询全部学生也要写是Student,在调用的时候可以用List接收),在resultType="Student"
中本来应该写Student的全类名,但是在conf中配置了全类名的别名为Student,所以这样写.
c.id值就是调用的时候唯一之别的,调用的方法与id值对应然后执行里面的sql语句
<mapper namespace="org.student.entity.StudentMapper">
<!-- id 值是唯一的 返回的类型 输入参数的类型-->
<!-- 根据学号查学生-->
<select id="queryStudentBySno" resultType="Student" parameterType="int">
select * from student where sno = #{sno}
</select>
<!-- 查全部学生-->
<select id="queryAllStudents" resultType="Student" >
select * from student
</select>
</mapper>
(2)建立接口StudentMapper.class
接口中的方法就是StudentMapper.xml里面的id值
//查询单个学生
Student queryStudentBySno(int sno);
//查询全部
List<Student> queryAllStudents();
(3)在conf.xml中
1)引入StudentMapper.xml
<mappers>
<!-- 加载映射文件 -->
<mapper resource="org/student/mapper/StudentMapper.xml"/>
</mappers>
2)设置别名
<typeAliases>
<!-- 单个别名 (别名 忽略大小写) -->
<!-- <typeAlias type="org.student.entity.Student" alias="student"/> -->
<!-- 批量定义别名 (别名 忽略大小写),以下会自动将该包中的所有类 批量定义别名:
别名就是类名(不带包名,忽略大小写) -->
<package name="org.student.entity"/>
</typeAliases>
3)conf.xml中有数据库配置信息,写自己的 url username password
4.测试
写一个测试类
public static void queryStudentBySno() throws IOException {
//加载MyBatis配置文件(为了访问数据库)
Reader reader = Resources.getResourceAsReader("conf.xml") ;
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader) ;
//session - connection
SqlSession session = sessionFactory.openSession() ;
StudentMapper studentMapper = session.getMapper(StudentMapper.class);
Student student = studentMapper.queryStudentBySno(2020);
System.out.println(student);
session.close();
}
注意:增删改需要提交事务
public static void deleteStudentBySno() throws IOException {
//加载MyBatis配置文件(为了访问数据库)
Reader reader = Resources.getResourceAsReader("conf.xml") ;
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader) ;
//session - connection
SqlSession session = sessionFactory.openSession() ;
StudentMapper studentMapper = session.getMapper(StudentMapper.class);
studentMapper.deleteStudentBySno(14);
session.commit(); //提交事务
session.close();
}
所用的文件有
1.Student.class (和数据库中的表对应的类,在scr下 org.student.entity包中)
2.StudentMapper.class(接口, 在src下的org.student.mapper包中)
3.StudentMapper.xml(映射文件可以写增删改查的查询语句, 在src下的org.student.mapper包中)
4.conf.xml 在scr下
5.testStudent.class(测试一下,在org.student.test包中)
package org.student.entity; import com.mysql.cj.jdbc.Blob; public class Student { private int sno; private String sname; private int sage; private String saddress; public Student() { } public Student(int sno, String sname, int sage, String saddress) { this.sno = sno; this.sname = sname; this.sage = sage; this.saddress = saddress; } public int getSno() { return sno; } public void setSno(int sno) { this.sno = sno; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public int getSage() { return sage; } public void setSage(int sage) { this.sage = sage; } public String getSaddress() { return saddress; } public void setSaddress(String saddress) { this.saddress = saddress; } @Override public String toString() { return sno+"-"+this.sname+"-"+this.sage+"-"+this.saddress ; } }
package org.student.mapper; import org.student.entity.Student; import java.util.List; public interface StudentMapper { /* * 1.方法名和mapper.xml文件中标签的id值相同 * 2.方法的 输入参数 和mapper.xml文件中标签的 parameterType类型一致 (如果mapper.xml的标签中没有 parameterType,则说明方法没有输入参数) * 3.方法的返回值 和mapper.xml文件中标签的 resultType类型一致 (无论查询结果是一个 还是多个(student、List<Student>),在mapper.xml标签中的resultType中只写 一个(Student);如果没有resultType,则说明方法的返回值为void) */ //查询单个学生 Student queryStudentBySno(int sno); //查询全部 List<Student> queryAllStudents(); //增加 void addStudent(Student student); //删除 void deleteStudentBySno(int sno); //修改 void updateStudentBySno(Student student); }
<?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="org.student.mapper.StudentMapper"> <!-- id 值是唯一的 返回的类型 输入参数的类型--> <!-- 根据学号查学生--> <select id="queryStudentBySno" resultType="Student" parameterType="int"> select * from student where sno = #{sno} </select> <!-- 查全部学生--> <select id="queryAllStudents" resultType="Student" > select * from student </select> <!-- 增加学生--> <insert id="addStudent" parameterType="Student" > insert into student(sno,sname,sage,saddress) values (#{sno},#{sname},#{sage},#{saddress}) </insert> <!-- <insert id="addStudent" parameterType="student" >--> <!-- insert into student(stuno,stuname,stuage,graname) values(#{stuNo},#{stuName},#{stuAge},#{graName} ) --> <!-- </insert>--> <!-- 删除学生--> <delete id="deleteStudentBySno" parameterType="int"> delete from student where sno = #{sno} </delete> <!-- 修改学生--> <update id="updateStudentBySno" parameterType="Student"> update student set sno=#{sno},sname=#{sname},sage=#{sage},saddress=#{saddress} where sno=#{sno} </update> </mapper>
<?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> <!-- 设置单个/多个别名 --> <typeAliases> <!-- 单个别名 (别名 忽略大小写) --> <!-- <typeAlias type="org.lanqiao.entity.Student" alias="student"/> --> <!-- 批量定义别名 (别名 忽略大小写),以下会自动将该包中的所有类 批量定义别名: 别名就是类名(不带包名,忽略大小写) --> <package name="org.student.entity"/> </typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 配置数据库信息 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:MySQL://localhost:3306/hotel?&useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers> <!-- 加载映射文件 --> <mapper resource="org/student/mapper/personMapper.xml"/> <mapper resource="org/student/mapper/StudentMapper.xml"/> <mapper resource="org/student/mapper/TeacherMapper.xml"/> </mappers> </configuration>
package org.student.test; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.student.entity.Student; import org.student.mapper.StudentMapper; import java.io.IOException; import java.io.Reader; import java.util.List; public class TestStudent { public static void queryStudentBySno() throws IOException { //加载MyBatis配置文件(为了访问数据库) Reader reader = Resources.getResourceAsReader("conf.xml") ; SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader) ; //session - connection SqlSession session = sessionFactory.openSession() ; StudentMapper studentMapper = session.getMapper(StudentMapper.class); Student student = studentMapper.queryStudentBySno(2016203491); System.out.println(student); session.close(); } public static void queryAllStudents() throws IOException { //加载MyBatis配置文件(为了访问数据库) Reader reader = Resources.getResourceAsReader("conf.xml") ; SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader) ; //session - connection SqlSession session = sessionFactory.openSession() ; StudentMapper studentMapper = session.getMapper(StudentMapper.class); List<Student> students = studentMapper.queryAllStudents(); System.out.println(students); session.close(); } public static void addStudent() throws IOException { //加载MyBatis配置文件(为了访问数据库) Reader reader = Resources.getResourceAsReader("conf.xml") ; SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader) ; //session - connection SqlSession session = sessionFactory.openSession() ; StudentMapper studentMapper = session.getMapper(StudentMapper.class); Student student = new Student(1,"张三",19,"济南"); studentMapper.addStudent(student); session.commit(); //提交事务 session.close(); } public static void deleteStudentBySno() throws IOException { //加载MyBatis配置文件(为了访问数据库) Reader reader = Resources.getResourceAsReader("conf.xml") ; SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader) ; //session - connection SqlSession session = sessionFactory.openSession() ; StudentMapper studentMapper = session.getMapper(StudentMapper.class); studentMapper.deleteStudentBySno(14); session.commit(); //提交事务 session.close(); } public static void updateStudentBySno() throws IOException { //加载MyBatis配置文件(为了访问数据库) Reader reader = Resources.getResourceAsReader("conf.xml") ; SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader) ; //session - connection SqlSession session = sessionFactory.openSession() ; StudentMapper studentMapper = session.getMapper(StudentMapper.class); Student student = new Student(2020,"丸子",19,"北京"); studentMapper.updateStudentBySno(student); session.commit(); //提交事务 session.close(); } public static void main(String [] args) throws IOException { // queryAllStudents(); // queryStudentBySno(); // addStudent(); queryAllStudents(); // deleteStudentBySno(); // queryAllStudents(); // updateStudentBySno(); // queryAllStudents(); } }