idea环境Mybatis连接数据库

时间:2024-04-03 10:20:21

一、简单了解Mybatis

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。(转载自百度百科)

    Mybatis优势:

        1、消除大量JDBC冗余代码

        2、学习曲线低(学习相对容易)

        3、友好的第三方缓存类库集成支持

        4、有好的Spring集成支持

        5、良好的性能

    Mybatis劣势:

        1、编写SQL语句的工作量大

        2、数据库移植性差,不能随意更换数据库

二、Mybatis如何连接数据库

        Mybatis连接数据库,首先需要数据库,使用最近学习使用的tcmp数据库其中的t_user表做一个示例idea环境Mybatis连接数据库

接下来就是重点了,使用Mybaits连接数据库

第一步:在核心配置文件(pom.xml)中导入jar包

<!--需要的依赖-->
<dependencies>
    <!--连接数据库的jar包-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.41</version>
    </dependency>
    <!--mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.4</version>
    </dependency>
    <!--测试-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <!--用日志的形式打印测试结果,方便调试-->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>
PS:核心配置文件中还需要配置<build>标签,这是idea的缺陷,虚拟机加载时无法加载src/mian/java下的.xml配置文件
<!--加载src/main/java目录下的所有.xml文件,这是idea的缺陷-->
<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
</build>
核心配置文件解决,做连接数据库的准备,在src/main/resources目录下创建database.properties文件内容如下:
jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/tcmp
    jdbc.username=root
    jdbc.password=6234
这个文件是方便连接数据库,更换数据库或数据库密码更换时更方便

接下来是与database.properties同目录下log4j.properties

log4j.rootLogger=DEBUG,CONSOLE,file
log4j.logger.cn.smbms.dao=debug
log4j.logger.com.ibatis=debug 
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug 
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug 
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug 
log4j.logger.java.sql.Connection=debug 
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug 
log4j.logger.java.sql.ResultSet=debug 
log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter=debug
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=error
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= [%p] %d %c - %m%n
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern=yyyy-MM-dd
log4j.appender.file.File=log.log
log4j.appender.file.Append=true
log4j.appender.file.Threshold=error
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n
log4j.logger.com.opensymphony.xwork2=error

src/main/resources目录下 全局配置文件mybatis-config.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>
    <!--连接数据库-->
    <properties resource="database.properties"/>

    <!--配置log4j-->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>

    <!--设置entity包下的别名-->
    <typeAliases>
        <package name="com/bdqn/entity"/>
    </typeAliases>

    <!--配置环境-->
    <environments default="dev">
        <!--环境变量:连接数据库-->
        <environment id="dev">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

配置结束后  com.bdqn.entity创建一个与数据库中t_user表相对应的实体类(上边有t_user表)

package com.bdqn.entity;

//t_user表的实体类
public class TUser {
    private int id;
    private String userName , nickName , password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "TUser{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", nickName='" + nickName + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
dao层(com.bdqn.dao) 创建TUserMapper.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.bdqn.dao.TUserMapper">
    <!--防止实体类与数据库命名不一致-->
    <resultMap id="userMap" type="TUser">
        <id column="id" property="id"/>
        <result column="user_name" property="userName"/>
        <result column="nick_name" property="nickName"/>
        <result column="password" property="password"/>
    </resultMap>

    <!--查询t_user表中数据行数-->
    <select id="queryCount" resultType="java.lang.Integer">
        select count(*) from t_user
    </select>

    <!--查询t_user表中所有数据信息-->
    <select id="queryAll" resultMap="userMap">
        select * from t_user
    </select>
</mapper>
然后在全局配置文件中使用映射器(在<environments>标签后)
<!--映射器-->
<mappers>
    <mapper resource="com/bdqn/dao/TUserMapper.xml"/>
</mappers>
之后需要在dao层写一个接口   注意!!!接口名要与映射文件名相同,接口中方法名与<select>标签的id相同

package com.bdqn.dao;

import com.bdqn.entity.TUser;

import java.util.List;

public interface TUserMapper {
    //查询t_user表中数据行数
    int queryCount();

    //查询t_user表中数据所有信息
    List<TUser> queryAll();

}

util包中,创建MybatisUtil类

package com.bdqn.util;

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;

//创建SqlSesison 关闭SqlSesison
public class MybatisUtil {
    //创建SqlSessionFacroty工厂
    private static SqlSessionFactory sqlSessionFactory;
    static{
        try {
            //读取mybatis-config.xml输入流
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            //工厂读取配置文件
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //创建SqlSession对象
    public static SqlSession createSqlSession(){
        return sqlSessionFactory.openSession();
    }

    //关闭SqlSession  释放资源
    public static void closeSqlSession(SqlSession sqlSession){
        if(sqlSession != null){
            sqlSession.close();
        }
    }
}
最后src/main/test/java目录下创建测试类TUserTest 请记住一定要在finally中释放资源


import com.bdqn.dao.TUserMapper;
import com.bdqn.entity.TUser;
import com.bdqn.util.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

//测试类
public class TUserTest {
    //查询t_user表中数据行数
    @Test
    public void tUserCountTest(){
        //创建SqlSession对象
        SqlSession sqlSession = null;
        int count = 0;
        try {
            sqlSession = MybatisUtil.createSqlSession();
            //查询t_user表中数据行数
            count = sqlSession.getMapper(TUserMapper.class).queryCount();
            System.out.println(count);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //释放资源
            MybatisUtil.closeSqlSession(sqlSession);
        }
    }

    //查询t_user表中数据所有信息
    @Test
    public void tUserAllTest(){
        //创建SqlSession对象
        SqlSession sqlSession = null;
        try {
            sqlSession = MybatisUtil.createSqlSession();
            //查询t_user表中数据所有信息
            List<TUser> list = sqlSession.getMapper(TUserMapper.class).queryAll();
            for (TUser tUser : list) {
                System.out.println(tUser);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //释放资源
            MybatisUtil.closeSqlSession(sqlSession);
        }
    }
}
我们来分别看一下测试结果


tUserCountTest()方法的测试结果如下

idea环境Mybatis连接数据库


tUserAllTest()方法的测试结果如下

idea环境Mybatis连接数据库


此阶段在Mybatis连接数据库的学习中的总结,仅供参考,如有不妥,欢迎指教!