mybatis配置——Java版

jar包依赖

1.mysql-connector-java-5.1.44.jar
2.mybatis-3.4.5.jar
3.log4j-1.2.17.jar

mybatis-config.xml

1.首先引入dtd 使xml增加提示功能

<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
  1. mybatis多环境配置,这里使用的事务管理是jdbc ,datasource 类型为POOLED ,${driver} 引入外部properties里面的属性
  <configuration>
        <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>
  </configuration>

数据源 type说明


image.png

3.配置外部properties更灵活,resource默认搜索 src目录

  <configuration>
  
    <properties resource="config.properties"></properties>

    <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>
   </configuration>

4.新建映射文件 在里面写sql语句,在src目录下创建个mapper包 在里面放映射xml

引入
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.interface1.UserMapper">

</mapper>
这里的namespace是添加的java映射接口类

5.创建一个返回类型map,数据库所有字段 , 想在 type中直接用User 需要在configxml中配置别名 请看8.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.interface1.UserMapper">

    <resultMap type="User" id="userMap">
        <id property="Id" column="Id" javaType="int" />
        <result property="uname" column="uname" javaType="String"/>
    </resultMap>
    
</mapper>

property是User模型类的字段, column 是数据库中的字段

6.插入语句


<insert id="insertUser" useGeneratedKeys="true" keyProperty="Id">
        insert into user(uname) values (#{uname})
</insert>

7.定义接口类

package com.interface1;

import java.util.List;

import com.model.User;

public interface UserMapper {

    
    public int  insertUser(User user);
    
    public int updateUser(User user);
    
    public int deleteUser(Integer id);
    
    public User selectUserById(Integer id);
    
    
    public List<User> selectAllUser();
    
    
    
    
}


8.定义别名,映射文件中直接可以用别名。

<properties resource="config.properties"></properties>
    <typeAliases>
        <typeAlias type="com.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>

9.在config.xml中配置所有映射文件位置


<mappers>
        <mapper resource="com/mapper/UserMapper.xml"/>
  </mappers>

10.配置log4j


 ### 设置###
log4j.rootLogger = debug,stdout,D,E

### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

11.测试类


public static void main(String[] args) {
        
        
        Logger log = LogManager.getLogger(Test.class);
        String resource = "mybatis.xml";
        InputStream is = null;
        
        try {
            is = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
        SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(is);
        
        SqlSession session =    sf.openSession();
        UserMapper umapper = session.getMapper(UserMapper.class);
        User user = new User();
        user.setUname("ad");
        
        umapper.insertUser(user);
        session.close();
        
        
    }


完整

<?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>    
    <!-- 为JavaBean起类别名 -->
    <typeAliases>
        <!-- 指定一个包名起别名,将包内的 Java 类的类名作为类的类别名 -->
        <package name="com.shiyanlou.mybatis.model" />
    </typeAliases>   

       <!-- 配置mybatis运行环境 -->
    <environments default="development">
        <environment id="development">
           <!-- type="JDBC" 代表直接使用 JDBC 的提交和回滚设置 -->
            <transactionManager type="JDBC" />

            <!-- POOLED 表示支持JDBC数据源连接池 -->
            <!-- 数据库连接池,由 Mybatis 管理,数据库名是 mybatis,MySQL 用户名 root,密码为空 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
                <property name="username" value="root" />
                <property name="password" value="" />
            </dataSource>
        </environment>
    </environments> 

    <mappers>
        <!-- 通过 mapper 接口包加载整个包的映射文件 -->
        <package name="com/shiyanlou/mybatis/mapper" />
    </mappers>
</configuration>

配置文件结构

MyBatis 配置文件的 configuration 标签主要包括:

configuration 配置
properties 属性
settings 设置
typeAliases 类型命名
typeHandlers 类型处理器
objectFactory 对象工厂
plugins 插件
environments 环境
environment 环境变量
transactionManager 事务管理器
databaseIdProvider 数据库厂商标识
mappers 映射器
在配置文件中,值包含了最基本的 typeAliases 类型命名、 environments 环境和 mappers 映射器。

settings 设置

settings 是 MyBatis 极为重要的设置,它们会改变 MyBatis 的运行时行为,如开启二级缓存、开启延迟加载等。

mappers 映射器

mappers 用于引用已经定义好的映射文件,告诉 MyBatis 去哪寻找映射 SQL 的语句。常见的方法:

(1)通过 resource 加载单个映射文件

<mappers>
      <mapper resource="com/shiyanlou/mybatis/mapper/UserMapper.xml"/> 
</mappers>
(2)通过完全限定资源定位符(绝对路径前加上"file:///")加载单个映射文件

<mappers>
      <mapper url="file:///home/shiyanlou/workspace/MyBatisTest/src/com/shiyanlou/mybatis/mapper/UserMapper.xml"/> 
</mappers>
(3)通过 mapper 接口对象加载单个映射文件

<mappers>
      <mapper class="com.shiyanlou.mybatis.mapper.UserMapper"/>
</mappers>
(4)通过 mapper 接口包加载整个包的映射文件

<mappers>
     <package name="com/shiyanlou/mybatis/mapper" />
</mappers>
注:(3)和(4)中需要将 mapper 接口类名和 mapper.xml 映射文件名称保持一致,且在一个目录中,如:



注解

image.png

例子

package shiyanlou.mybatis.annotation.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import shiyanlou.mybatis.annotation.model.User;

public interface UserMapper {

    /*
     * 新增用戶
     * @param user
     * @return
     * @throws Exception
     */
    @Insert("insert into user(name,sex,age) values(#{name},#{sex},#{age})")
    @Options(useGeneratedKeys=true,keyProperty="id")
    public int insertUser(User user) throws Exception;

    /*
     * 更新用戶
     * @param user
     * @throws Exception
     */
    @Update("update user set age=#{age} where id=#{id}")
    public void updateUser(User user) throws Exception;

    /*
     * 删除用戶
     * @param id
     * @return
     * @throws Exception
     */
    @Delete("delete from user where id=#{user_id}")
    public int deleteUser(@Param("user_id") Integer id) throws Exception;

    /*
     * 根据id查询用戶
     * @param id
     * @return
     * @throws Exception
     */
    @Select("select * from user where id=#{id}")
    @Results({
        @Result(id=true,property="id",column="id"),
        @Result(property="name",column="name"),
        @Result(property="sex",column="sex"),
        @Result(property="age",column="age"),
    })
    public User selectUserById(Integer id) throws Exception;

    /*
     * 查询所有用戶
     * @return
     * @throws Exception
     */
    @Select("select * from user")
    public List<User> selectAllUser() throws Exception;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容