mybatis详细总结:
一. 开发第一个MyBatis程序
1. 获取MyBatis驱动包
可以在官网http://blog.mybatis.org/或https://github.com/mybatis/mybatis-3/releases中下载MyBatis的资源文件mybatis-3.x.x.zip
1). 下载过程
2). 导入jar包
2. 创建person类
package org.wajpzywj.entity;
public class Person {
private int id;
private String name;
private int age;
public Person() {
super();
}
public Person(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
3. 创建表格person,还有数据
4. 在person同级目录中创建personMapper.xml
<?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.wajpzywj.entity.personMapper">
<select id="queryPersonById" resultType="org.wajpzywj.entity.Person" parameterType="int">
select * from person where id=#{id}
</select>
</mapper>
5. 在src下创建conf.xml
<?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>
<package name="org.wajpzywj.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/mybatis?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 在配置文件(conf.xml)中注册SQL映射文件(personMapper.xml)-->
<mappers>
<mapper resource="org/wajpzywj/entity/personMapper.xml" />
</mappers>
</configuration>
6. 创建测试类 TestMyBatis
package org.wajpzywj.entity;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class TestMyBatis {
public static void main(String[] args) throws IOException {
// 加载MyBatis配置文件(为了访问数据库)
Reader reader = Resources.getResourceAsReader("conf.xml");
// 创建sqlSession 的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 创建能够执行SQL映射文件中sql语句的sqlSession对象
SqlSession session = sessionFactory.openSession();
// 指定sql语句对应的标识字符串:namespace+id
String statement = "org.wajpzywj.entity.personMapper.queryPersonById";
// 执行查询,返回一个id为2的person对象
Person person = session.selectOne(statement, 2);
System.out.println(person);
session.close();
}
}
流程:
- MyBatis应用程序根据XML配置文件(conf.xml)创建SqlSessionFactory,
- 再由SqlSessionFactory创建一个SqlSession对象。
- SqlSession对象包含了执行SQL所需要的所有方法,可以直接运行映射的SQL语句,完成对数据的增删改查等操作。
其中映射的SQL语句存放在一个SQL映射文件中(如personMapper.xml),应用程序可以通过SQL映射文件中的namespace+id找到对应的SQL语句。
二. mybatis提示信息配置
1. 联网状态,xml文件中有提示信息:alt + /;
2. 不联网需要导入
1). ctrl+ 点击链接,下载mybatis-3-config.dtd.
2). 进入配置 window => preferences
3). 将下载的文件配置进入
4). 此时在不联网的时候也会有提示
三.使用MyBatis实现CRUD
1. conf.xml
<?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>
<package name="org.wajpzywj.entity" />
</typeAliases>
<environments default="development">
<environment id="development">
<!-- 事务提交方式:
JDBC: 利用JDBC方式处理事务(commit rollback close)
MANAGED: 将事务交由其他组件去托管(spring,jboss),默认关闭连接
<transactionManager type="MANAGED"/>
<property name="colseConnection" value="false"></property>
-->
<transactionManager type="JDBC"/>
<!-- 数据源类型:
UNPOOLED: 传统的JDBC模式
POOLED: 使用数据库连接池
JNDI: 从tomcat中获取一个内置的数据库连接池(数据库连接池-数据源)
-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/wajpzywj/entity/studentMapper.xml" />
</mappers>
</configuration>
2. studentMapper.xml
<?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">
<!-- namespace:该mapper.xml 映射文件的唯一标识 -->
<mapper namespace="org.wajpzywj.entity.studentMapper">
<!-- 后续通过 namespace.id -->
<!-- parameterType:输入参数的类型
resultType: 查询返回结果值的类型,返回类型
-->
<select id="queryStudentByNo" parameterType="int"
resultType="org.wajpzywj.entity.Student">
select * from student where stuNo=#{stuNo}
</select>
<insert id="addStudent" parameterType="org.wajpzywj.entity.Student">
insert into student(stuNo, stuName,stuAge,graName) values(#{stuNo},#{stuName},#{stuAge},#{graName})
</insert>
<delete id="deleteStudentByStuNo" parameterType="int">
delete from student where stuNo=#{stuNo}
</delete>
<update id="updateStudentByStuNo" parameterType="org.wajpzywj.entity.Student">
update student set stuName=#{stuName}, stuAge=#{stuAge},graName=#{graName} where stuNo=#{stuNo}
</update>
<select id="queryAllStudents" resultType="org.wajpzywj.entity.Student">
select * from student
</select>
</mapper>
3. test.java
package org.wajpzywj.test;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
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.wajpzywj.entity.Student;
public class Test {
public static void queryStudentByNo() throws IOException {
Reader reader = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
String statement = "org.wajpzywj.entity.studentMapper.queryStudentByNo";
Student student = session.selectOne(statement,1);
System.out.println(student);
session.close();
}
public static void queryAllStudent() throws IOException {
Reader reader = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
String statement = "org.wajpzywj.entity.studentMapper.queryAllStudents";
List<Student> students = session.selectList(statement);
System.out.println(students);
session.close();
}
public static void addStudent() throws IOException {
Reader reader = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
String statement = "org.wajpzywj.entity.studentMapper.addStudent";
Student student = new Student(3,"zhangsan",45, "xiaohognshu");
System.out.println(student);
int count = session.insert(statement,student);
session.commit();
System.out.println("增加"+count+"个数据");
session.close();
}
public static void updateStudentByStuNo() throws IOException {
Reader reader = Resources.get