第2章 MyBatis框架入门案例
2.1 MyBatis 框架开发的准备
2.1.1 官网下载MyBatis框架
从百度中“mybatis download”可以下载最新的Mybatis开发包。
进入选择语言的界面,进入中文版本的开发文档。
可以看到mybatis的中文开发手册了。
在maven工程中可以直接使用坐标来使用jar包,如果是普通工程需要自行下载mybatis的jar包
2.2 搭建Mybatis的开发环境
2.2.1 创建maven工程
2.2.2 添加mybatis的坐标和连接数据库的驱动
在pom.xml文件中加入mybatis3.5.1的坐标以及mysql的连接驱动(看自己使用的是什么数据库就加什么数据库的驱动):
注:在使用maven的时候需要改一下Maven的镜像,换成阿里云镜像。地址连接:https://www.jianshu.com/p/dddc8b8c5c74
如果不换镜像的话,项目导不了jar包。无法使用。
<!-- mybatis的依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<!-- mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<!--建议加上这个插件-->
<build>
<resources>
<resource>
<directory>src/main/java</directory> <!--所在目录-->
<includes>
<include>**/*.propertis</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
2.2.3 编写Student实体类
//推荐和表名一样
public class Student {
//定义属性名,目前要求和sql表中的列名一样。
private Integer id;
private String name;
private Integer age;
private String email;
public Student(){
}
public Student(Integer id, String name, String email, Integer age) {
this.id = id;
this.name = name;
this.email = email;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Studnet{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
", age=" + age +
'}';
}
}
2.2.4 编写持久层接口StudentDao
import com.lg.entity.Student;
import java.util.List;
//接口操作studnet表
public interface StudentDao {
//查询所有数据
public List<Student> selectStudents();
/**
*
* @param student 表示要插入到数据库的数据。
* @return int ,表示执行insert操作后的影响数据库的行数。
*/
public int insertStudent(Student student);
}
2.2.5 编写持久层接口的映射文件StudentDao.xml
要求:
创建位置:必须和持久层在相同的包里。
名称:必须一持久层接口名称命名文件名,扩展名是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="com.lg.dao.StudentDao">
<!--
select:表示查询操作。
属性:id:执行sql语法的唯一标识,mybatis会使用这个id的值来找到要执行的sql语句。
可以自定义,但是建议使用接口中的方法名。
resultType:表示结果类型的,是sql语句执行后得到的ResultSet得到的java对象的类型
值写类型的全限定名称
-->
<select id="selectStudents" resultType="com.lg.entity.Student">
select id,name,age,email from student order by id
</select>
<insert id="insertStudent">
insert into student value (17,"李广",20,"zhangfeng@qq.com")
</insert>
</mapper>
<!--
sql映射文件:写sql语句的,mybatis会执行这些sql
1、指定约束文件
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
mybatis-3-mapper.dtd是约束文件的名称,
2、约束文件的作用:用来限制当前文件出现的标签,属性必须符合mybatis的要求的。
3、mapper 是当前文件的跟标签,必须的。
属性: namespace:叫做命名空间,唯一值的,可以自定义的字符串。
建议使用dao接口的权限定名称。
4、在maper标签中,可以使用特定的标签,表示数据库的特定操作。
<select>:表示执行查询
<update>:表示更新数据库
<delete>:表示删除的
-->
2.2.6 编写mybatis的主配置文件mybatis.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">
<!--
mybatis 的主要配置文件:主要定义了数据库的配置信息,sql映射文件的位置
-->
<configuration>
<!-- settings:控制mybatis全局行为-->
<settings>
<!-- 输出日志-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!-- 环境配置:数据库的连接信息
default:必须和某个environment中的id值一样。
告诉mybatis使用哪个数据库发连接信息。也就是访问哪个数据库
-->
<environments default="mydev">
<!-- environment:一个数据库信息的配置,环境
id:唯一值,自定义,表示环境的名称
可以有多个<environment id=""> </environment>标签 一个标签表示一个数据库
-->
<environment id="mydev">
<!-- transactionManager: mybatis的事务类型
type:JDBC(表示使用jdbc中的Connection对象commit,rollback做事务处理)-->
<transactionManager type="JDBC"/>
<!-- dataSource :表示数据源,连接数据库用的
type:表示数据的类型,POOLED表示使用连接池
-->
<dataSource type="POOLED">
<!-- driver url username password 是固定的,不能自定义 -->
<!-- 数据库的驱动类名 因为使用的驱动是8.0以上的版本,得加上cj-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<!-- 连接数据库的url字符串-->
<property name="url" value="jdbc:mysql://localhost:3306/lg?serverTimezone=UTC"/>
<!-- 访问数据库的用户名-->
<property name="username" value="root"/>
<!-- 密码-->
<property name="password" value="1011"/>
</dataSource>
</environment>
</environments>
<!-- sql的映射文件的位置-->
<mappers>
<!--
一个mapper标签指定一个文件的位置
从类路径开始:
-->
<mapper resource="com\lg\dao\StudentDao.xml"/>
</mappers>
</configuration>
2.2.7 编写测试类
import com.lg.entity.Student;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MyApp {
public static void main(String[] args) throws IOException {
//访问mybatis读取student数据
//1、定义mybatis主配置文件的名称,从类路径的根开始(target/classes)
String path = "mybatis.xml";
//2、读取文件
InputStream in = Resources.getResourceAsStream(path);
//3、创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//4、创建SqlSessionFactory对象
SqlSessionFactory factory = builder.build(in);
//5、【重要】获取SqlSession对象,从创建SqlSessionFactory对象中获取
SqlSession sqlSession = factory.openSession();//获取非自动提交事务的sqlSession对象。
//6、【重要】指定要执行的sql语句标识,sql映射文件中的namespace+"."+标签的id值
String sqlId = "com.lg.dao.StudentDao"+"."+"insertStudent";
// 7、执行sql语句 查询
List<Student> students = sqlSession.selectList(sqlId);
// 输出结果
for (Student student : students) {
System.out.println(student);
}
//这是插入操作
// Student student = new Student(12,"ff","23423@qq.com",20);
// int nums = sqlSession.insert(sqlId,student);
// //mybatis默认是不提交事务的,所一在insert、update、delete后要手工提交事务。
// sqlSession.commit();
// System.out.println("执行结果:"+nums);
//关闭sqlSession对象
sqlSession.close();
}
}