MyBatis配置
MyBatis配置
开源俱乐部 发表于3年前
MyBatis配置
  • 发表于 3年前
  • 阅读 480
  • 收藏 0
  • 点赞 0
  • 评论 0

一、Mybatis配置

(1)准备环境

        本文的环境是使用Mybatis操作数据库,因此需要做如下准备工作:

        1)安装MySQL数据库

        2)创建表

        3)配置mybatis和mysql的jar包(可以使用添加路径或Maven来管理两种方式,本文不做赘述)

        本例中使用的Maven来管理的jar包,“pom.xml”文件内容如下:

<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/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.uni2uni.myapp</groupId>
 <artifactId>myapp</artifactId>
 <packaging>war</packaging>
 <version>0.0.1-SNAPSHOT</version>
 <name>myapp Maven Webapp</name>
 <url>http://maven.apache.org</url>
 <dependencies>
  <dependency>
   <groupId>org.mybatis</groupId>
   <artifactId>mybatis</artifactId>
   <version>3.2.7</version>
  </dependency>
  <dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.31</version>
  </dependency>

  <dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>3.8.1</version>
   <scope>test</scope>
  </dependency>
 </dependencies>
 <build>
  <finalName>myapp</finalName>
 </build>
</project>

(2)配置数据库实体

        数据库实体在maven项目中位置为:/src/main/java/中

        本例的位置是:/src/main/java/com.uni2uni.Model/User.java

        内容如下所示:

package com.uni2uni.Model;
public class User {
 private int Id;
 private String Username;
 private String Password;
 public int getId() {
  return Id;
 }
 public void setId(int id) {
  Id = id;
 }
 public String getUsername() {
  return Username;
 }
 public void setUsername(String username) {
  Username = username;
 }
 public String getPassword() {
  return Password;
 }
 public void setPassword(String password) {
  Password = password;
 }
}

(3)配置MyBatis配置文件

        Mybatis的配置文件分3类:SqlMapConfig.xml、config.propertes、实体名.xml

        SqlMapConfig.xml

        一般只有一个“SqlMapConfig.xml”文件,名称可以自定义,它用于存放mybatis的常量和设置、指定“config.propertes”的位置、指定“实体.xml”的位置。

        config.propertes

        用于存放“SqlMapConfig.xml”文件中设定的动态变量信息,名字可以自定义,可以是一个文件,也可以是多个文件。它的存放格式是每行一个变量,用“变量名=变量值”的格式存放。

        实体名.xml:

        这个用于配置实体的Schemal、自定义数据库返回值的类型及对数据库操作的sql脚本,多数情况下在项目中为多个文件。本例中该文件为“user.xml”。

        在Maven项目中,Mybatis的配置文件一般放在/src/main/resources,如下图所示:

        本例中“SqlMapConfig.xml”中内容如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.1//EN"  
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
 <properties resource="config.properties" />
 <settings>
  <setting name="cacheEnabled" value="true" />
  <setting name="lazyLoadingEnabled" value="true" />
  <setting name="multipleResultSetsEnabled" value="true" />
  <setting name="useColumnLabel" value="true" />
  <setting name="useGeneratedKeys" value="false" />
  <setting name="autoMappingBehavior" value="PARTIAL" />
  <setting name="defaultExecutorType" value="SIMPLE" />
  <setting name="defaultStatementTimeout" value="25" />
  <setting name="safeRowBoundsEnabled" value="false" />
  <setting name="mapUnderscoreToCamelCase" value="false" />
  <setting name="localCacheScope" value="SESSION" />
  <setting name="jdbcTypeForNull" value="OTHER" />
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" />
 </settings>
 <typeAliases>
  <typeAlias type="com.uni2uni.Model.User" alias="User" />
 </typeAliases>
 <environments default="development">
  <environment id="development">
   <transactionManager type="JDBC" />
    <dataSource type="POOLED">
     <property name="driver" value="${driver}" />
     <property name="url" value="${url}" />
     <property name="username" value="${username}" />
     <property name="password" value="${password}" />
    </dataSource>
  </environment>
 </environments>
 <mappers>
  <mapper resource="user.xml" />
 </mappers>
</configuration>

        本例中“config.properties”中内容如下所示:

driver:com.mysql.jdbc.Driverusername:root
password:root

        本例中“user.xml”内容如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper  
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN"  
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="User">
 <insert id="add" parameterType="User">
  insert into t_user(username,password) values(#{username},#{password})
 </insert>
 
 <delete id="deleteById" parameterType="User">
  delete from t_user where id=#{id}
 </delete>
 
 <update id="updateById" parameterType="User">
  update t_user set username=#{username},password=#{password} where id=#{id}
 </update>
 <select id="getAll" parameterType="User">
  select * from t_user
 </select>
 
 <select id="getById" parameterType="User" resultMap="resultListUser">
  select * from t_user where id=#{id} and 1=1
 </select>
 <resultMap type="User" id="resultListUser">
  <id column="id" property="id" />
        <result column="username" property="username" />
        <result column="password" property="password" />
 </resultMap>
</mapper>

(4)配置数据库访问类

        数据库访问类在maven项目中位置为:/src/main/java/中

        本例中位置为:

        /src/main/java/com.uni2uni.Dao/SessionFactoryUtils.java

        /src/main/java/com.uni2uni.Dao/UserDao.java

        “SessionFactoryUtils.java”文件内容如下:

package com.uni2uni.Dao;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SessionFactoryUtils {
 private String source="SqlMapConfig.xml";
    private SqlSessionFactory sqlSessionFactory=null;
    private static SessionFactoryUtils sessionFactory=new SessionFactoryUtils();
    private SessionFactoryUtils(){
        try{
            Reader read=Resources.getResourceAsReader(source);
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(read);
        }catch(IOException e){
            System.out.println("IO异常,读取资源文件SQLMAPPER.XML出错"+e.getMessage());
            throw new ExceptionInInitializerError();
        }
    }
    public static SessionFactoryUtils getSessionfactory(){
        return sessionFactory;
    }
    public SqlSessionFactory getSqlSessionFactory(){
        return sqlSessionFactory;
    }
}

        “UserDao.java”文件内容如下:

package com.uni2uni.Dao;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.uni2uni.Model.User;
public class UserDao {
 
 private SqlSessionFactory sqlSessionFactory = SessionFactoryUtils
            .getSessionfactory().getSqlSessionFactory();
 
 public void add(User user) {
        SqlSession sqlSession=null;
        try {
             sqlSession=sqlSessionFactory.openSession();
             sqlSession.insert("add", user);
            sqlSession.commit();  
        } finally {
            sqlSession.close();
        }
    }
 
  public void delete(int id) {
         SqlSession sqlSession=null;
         try {
              sqlSession=sqlSessionFactory.openSession();
             sqlSession.delete("User.deleteById", id);
             sqlSession.commit();  
         } finally {
             sqlSession.close();
         }
     }
 
 public User getById(int id) {
        SqlSession sqlSession=null;
        User user=null;
        try{
            sqlSession=sqlSessionFactory.openSession();
            user=sqlSession.selectOne("User.getById",id);
            sqlSession.commit();
        }finally{
            sqlSession.close();
        }
        return user;
    }
}

(5)配置Web.xml

        如果在Web项目中运行MyBatis,还需要配置web.xml文件。如果仅仅是在单元测试中运行MyBatis,则不用配置web.xml文件。

        web.xml中加入如下配置:

<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

 <!-- 指定Spring Bean的配置文件所在目录。默认配置在WEB-INF目录下 -->
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:beans.xml</param-value>
 </context-param>

(6)测试

        测试文件一般放在/src/test/java文件夹中。

        本例中位置为:/src/test/java/com.uni2uni.Unit/UserUnit.java

        “UserUnit.java”文件内容如下:

package com.uni2uni.Unit;
import com.uni2uni.Dao.UserDao;
import com.uni2uni.Model.User;
import junit.framework.TestCase;
public class UserUnit extends TestCase{
 public void AddUser(){
  User user = new User();
  user.setUsername("zhangsan");
  user.setPassword("111");
  UserDao dao=new UserDao();
  dao.add(user);
 }
 
 public void GetById(){
  int id=1;
  User user=null;
  UserDao dao=new UserDao();
  user = dao.getById(id);
  if(user!=null){
   System.out.println(user.getUsername());
   System.out.println(user.getPassword());
  }
 }
 
}

        直到单元测试都通过了,说明MyBatis的配置是正常的。如下图所示:

        

二、Demo下载

下载地址:http://pan.baidu.com/s/1dD1TdL3

三、知识扩展

(1)Maven项目路径

        在Maven项目中,建议按照标准的方式来存放项目。

        /src/main/java:用于存放java类文件。

        /src/main/resources:用于存放配置文件。

        /src/test/java:用于存放测试文件,如单元测试文件。

        本例中项目的目录结构如下图所示:

(2)Mybatis最佳实践之一

        在Mapper文件中,除了使用xml文件写sql的方式外,还支持注解。但不推荐使用注解,而是使用如下的方式:

 <mappers>
  <mapper resource="user.xml" />
 </mappers>

        使用注解的方式通常将sql语句写在model类中,然后使用如下方式引入

 <mappers>
  <mapper resource="命名空间.UserMapper" />
 </mappers>

(3)Mybatis最佳实践之二

        通常,我们会使用代码生成工具来帮我们生成大部分的代码,而不用自己手写。有关代码生成工具的时候,以后再做详细介绍。

共有 人打赏支持
粉丝 11
博文 39
码字总数 31422
×
开源俱乐部
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: