Mybatis学习入门--------基本环境搭建(1)

工具及软件

编辑器:intellij IDEA

项目基础:使用maven构建demo项目(maven构建项目,可以节省导jar包的繁琐,由于采用依赖注入的方式,基本不会出现漏jar包导致项目出错的情况)

项目结构(备注:使用log4j作为日志输出管理)

pom.xml

  <dependencies>
    <!-- 引入junit,作为测试 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <!-- 引入mybatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.6</version>
    </dependency>
    <!-- 引入log4j日志驱动 -->
      <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.2.17</version>
      </dependency>
  </dependencies>

Mybatis的核心配置文件sqlMapConfig.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文件  -->
    <properties resource="jdbc.properties"></properties>
    <!-- 开启log4j日志,注意顺序,必须在前面,且在properties后面,否则会报错 -->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <!-- 赋别名,注意顺序必须在前面,且在settings后面,否则会报错 -->
    <typeAliases>
        <typeAlias type="cn.vision.entity.User" alias="User"/>
    </typeAliases>

    <!-- 配置开发环境,可以配置多个,在具体用时再做切换 -->
    <environments default="test">
        <environment id="test">
            <transactionManager type="JDBC"></transactionManager>    <!-- 事务管理类型:JDBC、MANAGED -->
            <dataSource type="POOLED">    <!-- 数据源类型:POOLED、UNPOOLED、JNDI -->
                <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>

    <!-- 加载映射文件 mapper -->
    <mappers>
        <!-- 路径用 斜线(/) 分割,而不是用 点(.) -->
        <mapper resource="cn/vision/mapper/UserMapper.xml"></mapper>
    </mappers>

</configuration> 

jdbc配置文件jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
jdbc.initialSize=0
jdbc.maxActive=20
jdbc.maxIdle=20
jdbc.minIdle=1
jdbc.maxWait=60000

log4j日志文件配置属性

log4j.rootLogger=DEBUG, stdout    

log4j.appender.stdout=org.apache.log4j.ConsoleAppender    
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout    
log4j.appender.stdout.layout.ConversionPattern=[service] %d -%-4r [%t] %-5p %c %x - %m%n    

#log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.R.File=../logs/service.log
#log4j.appender.R.layout=org.apache.log4j.PatternLayout
#log4j.appender.R.layout.ConversionPattern=[service] %d - %c -%-4r [%t] %-5p %c %x - %m%n

#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  

数据库

CREATE TABLE `mybatis` (
  `Id` varchar(255) NOT NULL DEFAULT '',
  `userId` varchar(255) NOT NULL DEFAULT '',
  `userName` varchar(255) NOT NULL DEFAULT '',
  `sex` varchar(8) NOT NULL DEFAULT '',
  `age` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `mybatis` VALUES ('123456','user123456','测试3','男',11),('3d993a1d-b6de-403a-b104-bf4d86643ac1','ad123456','测试','男',11),('bc80e443-ca53-4ef1-adbd-312e282f2d06','ad123456','测试2','男',11);

基本准备工作完成下面进行测试文件编写

Entity

package cn.vision.entity;

public class User {
    String id;
    String userId;
    String userName;
    String sex;
    int age;

    public String getId() {
        return id;
    }

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

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

mapper---------简单mybatis动态sql语句查询操作

<?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="cn.vision/mapper.UserMapper">   <!-- 命名空间,名字可以随意起,只要不冲突即可 -->
    <!-- 对象映射,可以不写 -->
    <!-- 查询功能,resultType 设置返回值类型 -->
    <select id="findAll" resultType="User">  <!-- 书写 SQL 语句 -->
        SELECT * FROM mybatis
        <where>
            <if test="userName != null">
                userName = #{userName}
            </if>
            <if test="userId != null">
                AND userId = #{userId}
            </if>
        </where>
    </select>
</mapper>

test------------使用junit单元测试进行 

package cn.vision.test;

import cn.vision.entity.User;
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.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class testMybatis {
    SqlSession sqlSession;
    @Before
    public void init()throws IOException{
        String resource = "sqlMapConfig.xml";           //定位核心配置文件
        //官方示例获取resource,需抛出异常
        InputStream inputStream = Resources.getResourceAsStream(resource);

        //通过类属性获得resource,无需抛出异常
        //InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        // 创建 SqlSessionFactory

        sqlSession = sqlSessionFactory.openSession();            //获取到 SqlSession
    }

    @Test
    public void ceshi() throws IOException{
        /**
         *  1、获得 SqlSessionFactory
         *  2、获得 SqlSession
         *  3、调用在 mapper 文件中配置的 SQL 语句
         */
        String resource = "sqlMapConfig.xml";           // 定位核心配置文件
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);    // 创建 SqlSessionFactory

        SqlSession sqlSession = sqlSessionFactory.openSession();    // 获取到 SqlSession

        // 调用 mapper 中的方法:命名空间 + id
        User user = new User();
        user.setUserId("user123456");
        List<User> personList = sqlSession.selectList("cn.vision/mapper.UserMapper.findAll");
       // List<User> personList = sqlSession.selectList("cn.vision/mapper.UserMapper.findAll",user);
        for (User p : personList){
            System.out.println("name: "+p.getUserName());
        }
    }
}

成功查询到数据则为

两个问题

1、为什么使用junit单元测试?

使用单元测试可以更好、更简洁的测试每一个模块/方法的执行结果。如果不使用junit的话,很可能你为了某一个模块的测试结果而运行整个项目,从时间和效率角度来讲,熟练使用一个便捷的测试工具会给开发带来质的变化

2、mybatis和hibernate区别是什么?

嗯、简单来说hibernate更封闭和笨重、安全性更高适合大企业开发项目

mybatis更开放、量级更轻,适用于快速开发项目

hibernate的sql语句都能通过hql统一解决不同数据库的兼容性问题,sql语句完全封装,一般情况下不能定制更高效率的sql语句

mybatis需要根据不同的数据库编写不同的sql语句,但mybatis可以为不同的需求编写更高效率的sql语句

此章只涉及到mybatis的基础配置,并未实际应用与web项目,所以并未配置web.xml

内容仅为作者的个人学习路上的笔记,和个人见解,概括不全或有误之处,可留言或私信修改

---------------------------------2018/05/05-----------------------------------------

猜你喜欢

转载自blog.csdn.net/jiepan9178/article/details/80184071
今日推荐