Mybatis学习01:利用mybatis查询数据库
Mybatis学习01:利用mybatis查询数据库
通过mybatis来操作mysql数据库的步骤大致可分为以下几步:
在这里,我们以对下面这个这个表格进行操作为例:
表名:ssm
1 配置依赖#
在pom.xml中添加所需要的的依赖
<!-- mybatis核心依赖 --> <!-- https://mvnrepository.com/artifact/org.mybatis/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>${mysql.version}</version> </dependency> <!--为了方便测试,我们也加上测试单元依赖--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!--为了便于构造类,添加lomnok依赖--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> <scope>provided</scope> </dependency> <!--在build中进行以下配置--> <resources> <resource> <directory>src/main/java</directory><!--结果所在的目录--> <includes><!--包括目录下的.properties,.xml 文件都会扫描到--> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources>
对于操作数据库,我们必须在maven中把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全局行为--> <settings> <!--设置mybatis输出日志--> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <environments default="mydev"> <environment id="mydev"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!--数据库的驱动类名--> <property name="driver" value="com.mysql.jdbc.Driver"/> <!--连接数据库的url字符串,具体地址根据自己的数据库来填--> <property name="url" value="jdbc:mysql://localhost:3306/springdb"/> <!--访问数据库的用户名,更具自己的数据库;来填--> <property name="username" value="root"/> <!--密码,根据自己的数据库设置来填--> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!-- sql mapper(sql映射文件)的位置--> <mappers> <mapper resource="com/bjpowernode/dao/StudentDao.xml"/> <!--<mapper resource="com/bjpowernode/dao/SchoolDao.xml" />--> </mappers></configuration>
注意上面配置的一个小问题,如果数据库的版本为8以上,那么在配置数据库url操作时就应该如下所示:
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT&nullCatalogMeansCurrent = true"/>
如果是8版本以下,url的配置如下
<property name="url" value="jdbc:mysql://localhost:3306/ssm所在的数据库"/>
接下来在src\main\java\com\bjpowernode\domain下建立一个和表有关的类
@Datapublic class Student { private Integer id; private String name; private String email; private Integer age;}
之后再在bjpowernode\dao
下新建一个关于操作数据库的接口
package com.bjpowernode.dao;import com.bjpowernode.domain.Student;import java.util.List;public interface StudentDao { //这里对表进行选择操作 //选择数据 List<Student> selectStudents(); //插入数据 int insertStudent(Student student);}
本文中使用mapper代理的方式,
<?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是命名空间,作用就是对sql进行分类化管理,理解为sql隔离,在这里namesapce是dao下的java类,而配置文件和java文件的文件名保持一致--><mapper namespace="org.example.dao.StudentDao"><!--该sql语句的id,resultType是表示指定sql输出结果所映射的java对象类型,这里执行操作得到的结果是一个包含一行数据库信息的学生类,因此resultType是student类的路径--> <select id="selectStudents" resultType="org.example.domain.student"> select * from ssm order by id </select> <!-- 插入操作,只需要id,不需要输出类型 --> <insert id="insertStudent" > insert into ssm value (#{id},#{name},#{email},#{age}) </insert></mapper>
MybatisUtils工具类
package org.example.utils;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;public class MyBatisUtils { private static SqlSessionFactory factory = null; static { //获取mybatis主配置文件, String config="mybatis.xml"; // 需要和你的项目中的文件名一样 try { //读取配置文件 InputStream in = Resources.getResourceAsStream(config); //创建SqlSessionFactory对象,目的是获取SqlSession factory = new SqlSessionFactoryBuilder().build(in); } catch (IOException e) { e.printStackTrace(); } } //获取SqlSession的方法 public static SqlSession getSqlSession() { SqlSession sqlSession = null; if( factory != null){ //获取SqlSession,SqlSession能执行sql语句 sqlSession = factory.openSession();// 非自动提交事务 } return sqlSession; }}
所有类和配置都搭建好了之后写一个测试类,以选择元素的sql语句为例
package org.example;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.example.domain.student;import org.example.utils.MyBatisUtils;import java.io.IOException;import java.io.InputStream;import java.util.List;public class MyApp2 { public static void main( String[] args ) throws IOException { //获取SqlSession对象,从SqlSessionFactory中获取SqlSession SqlSession sqlSession = MyBatisUtils.getSqlSession(); //【重要】指定要执行的sql语句的标识。 sql映射文件中的namespace + "." + 标签的id值 String sqlId = "org.example.dao.StudentDao.selectStudents"; //【重要】执行sql语句,通过sqlId找到语句 List<student> studentList = sqlSession.selectList(sqlId); //输出结果 studentList.forEach( stu -> System.out.println(stu)); //关闭SqlSession对象 sqlSession.close(); }}
输出结果:以自己在数据库中设置的数据为准
作者:kevin_kay
出处:https://www.cnblogs.com/hello-liu/p/14912017.html