使用mybatis操作数库
现在使用mybatis对学生表进行操作,步骤如下:
第一,创建mybatisdb数据库,并创建Student学生表
第二步,在pom.xml文件中加入相应的依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>per.pcqstart</groupId>
<artifactId>mybatisDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- 添加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>5.1.35</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<!--
idea默认扫描resources下的xml文件,
因此需要添加该resources组件来扫描项目所有xml文件
-->
<resources>
<resource>
<!--所有文件夹用**/表示,例如java下的所有文件夹**/;所有的具体文件用*.表示。例如*.xml-->
<directory>src/main/java</directory><!--所在的目录-->
<includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>
第三步,使用java在idea中创建对应的Student类
public class Student{
private Integer id;
private String name;
private Integer age;
private Integer grade;
省略getter,setter,toString方法
}
第四步,创建对应的StudentDao和对应的StudentDao.xml文件
①创建StudentDao.java
public interface StudentDao {
public List<Student> selectStudents();
}
②创建StudentDao.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="per.dao.StudentDao">
<select id="selectStudents" resultType="per.domain.Student">
select id,name,age,grade from Student order by id
</select>
<!--
sql映射文件(sql mapper):写sql语句的,mybatis执行
1.①namespace:命名空间,唯一值,可以是自定义的字符串。
但是规范要求使用dao接口的全限定名称。
②id:要执行sql语句的唯一标识,mybatis会根据这个id来执行相应sql语句。
可以自定义,但要求使用接口中的方法名称;
③resultType:表示查询语句返回的结果类型;是执行sql语句后得到的ResultSet,
遍历这个ResultSet得到的java对象类型。规范要求编写被查询类的全限定名称;
-->
<!--
studentDao.xml是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:约束文件的名称,扩展名是dtd的。
2.约束文件作用:限制,检查在当前文件中出现的标签,属性必须符合mybatis的要求。
3.mapper:当前文件的根标签。
4.在当前文件中,可以使用特定的标签,表示数据库的特定操作;
<select>:表示执行查询的操作
<update>:表示更新数据库的操作
<insert>:表示插入的操作
<delete>:表示删除的操作
-->
</mapper>
第五步,配置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">
<configuration>
<settings>
<!-- 在mybatis的主配置文件中加入STDOUT_LOGGING日志配置,可以在控制台
输出执行的sql语句和参数-->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<!-- 环境配置:数据库的连接信息-->
<!--
environments:可以在该标签内部配置多个环境变量
default的值:用到的配置环境,与用到的环境变量<environment id="development">一制;
例如使用<environment id="development">这个环境变量,则default="development"
-->
<environments default="development">
<!--
environment:一个数据库的环境配置
id:唯一值,自定义,表示环境的名称
-->
<environment id="development">
<!--
transactionManager:mybatis的事务类型
type:JDBC(表示使用jdbc中的Connection对象的commit,rollback做事务处理)
-->
<transactionManager type="JDBC"/>
<!--
dataSource:连接池的数据源
type:表示数据源的类型,POOLED表示使用连接池
-->
<dataSource type="POOLED">
<!-- 数据库的驱动类名-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!-- 连接数据库的url地址-->
<property name="url" value="jdbc:mysql://localhost:3306/mybatisdb"/>
<!-- 访问数据库的用户名-->
<property name="username" value="root"/>
<!-- 访问数据库用户的密码-->
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- sql mapper(sql映射文件的位置,
例如:studentDao.xml编译后的在target/classes后面的地址per/dao/StudentDao.xml)-->
<mappers>
<!-- 有多少个sql映射文件,就需要多少个<mapper>-->
<mapper resource="per/dao/StudentDao.xml"/>
</mappers>
</configuration>
<!--
1.此处为mybatis的主配置文件,名称可以自定义:主要定义了①数据库的配置信息 ②sql映射文件的位置;
2.①<?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>:配置文件的根标签;
④<mappers>:多sql映射文件的位置(sql.xml);
-->
最后一步,创建主函数并读取student表的数据
package per;
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 per.domain.Student;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**maven项目的主入口(或者main函数)所在的类要在其他类的上一层**/
public class ReadData {
public static void main(String[] args) throws IOException {
//访问mybatis读取student数据
//1.定义mybatis主配置文件的名称,从类路径的根开始(即target/classes之后开始)
String config="mybatis.xml";
//2.读取config的主配置文件的内容,通过Resource.getResourceAsStream(),获取InputStream输入流对象
InputStream resourceAsStream = Resources.getResourceAsStream(config);
//3.创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//4.创建SqlSessionFactory对象
SqlSessionFactory factory = builder.build(resourceAsStream);
//5.【重要】获取SqlSession对象,从SqlSessionFactory中获取SqlSession对象
SqlSession sqlSession = factory.openSession();
//6.【重要】指定要执行的sql语句的标识。sql映射文件中的namespace+"."+标签的id值
String sqlId = "per.dao.StudentDao.selectStudents";
//7.执行sql语句,通过sqlId找到相应的语句
List<Student> studentLists = sqlSession.selectList(sqlId);
//8.输出结果
/**
* lamba表达式
*studentLists.forEach(stu -> System.out.println(stu));
*
*/
//增强for
for(Student stu : studentLists){
System.out.println("查询的对象"+stu);
}
//9.关闭SqlSession对象
sqlSession.close();
/**
* 关键对象:
* ①通过Resource的getResourceAsStream()方法获取InputStream对象
* ②通过new SqlSessionFactoryBuilder创建SqlSessionFactoryBuilder builder对象
* ③通过builder对象的build()方法获取SqlSessionFactory factory对象
* ④通过factory对象的openSession()方法获取SqlSession对象
* ⑤指定sql语句的标识String sqlId;
* ⑥通过SqlSession对象的selectList()方法多去List<Object>集合
* ⑦输出
*
*/
}
}
输出结果