阅读 185

Mybatis学习01:利用mybatis查询数据库

Mybatis学习01:利用mybatis查询数据库

通过mybatis来操作mysql数据库的步骤大致可分为以下几步:

在这里,我们以对下面这个这个表格进行操作为例:
表名:ssm
image

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&amp;characterEncoding=utf-8&amp;serverTimezone=GMT&amp;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();        }}

输出结果:以自己在数据库中设置的数据为准
image

作者:kevin_kay

出处:https://www.cnblogs.com/hello-liu/p/14912017.html


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐