MyBatis xml 配置 详解

mybatis 基本配置信息

<?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>
<!-- 定义数据库信息,默认使用development数据库构建数据库连接  
    environments: 配置数据源的连接集合,可以配置多个数据源(mysql,      Oracle1,Oracle2)
    default : 默认启用那个数据源
-->
 <environments default="development">
   <!-- 数据源配置
transactionManager: 事务管理
dataSource : 数据源配置
id : 数据源的标识
    
 -->
 <environment id="development">
 <!-- 事务管理: JDBC事务管理 
    1. JDBC 默认采用JDBC的事务管理
    2. MANAGED :采用容器的方式管理事务(JNDI数据源)由开发者提示事务
    3.     自定义,使用者定义数据库事务的管理方式

 -->
 <transactionManager type="JDBC"/>
 <!-- 配置数据库连接信息 
    type : 提供链接数据库的连接方式
        1. UNPOOLED : 非连接池数据库
        2. POOLED : 连接池数据库
        3. JDNI: JDNI 数据库
        4. 自定义

 -->
 <dataSource type="POOLED">
 <!--  -->
 <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
 <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
 <property name="username" value="scott"/>
 <property name="password" value="rootroot"/>
 </dataSource>
 </environment>
 </environments>
 <mappers>
 <mapper resource="org/lq/mapper/DeptMapper.xml"/>
 </mappers> 
</configuration>

连接测试

public class test {

public static void main(String[] args) {
    
    /**
     * SqlSessionFactory : 工厂接口,依靠工厂来生成SqlSession(会话)
     * SqlSessionFactoryBuilder() : 构造器,读取配置文件,根据配置文件或代码来生成SqlSessionFactory
     * SqlSession : 可以发送SQL去执行并返回结果,也可以获取Mapper接口
     * SQL Mapper: 它是MyBatis设置的组件,它是由一个接口和xml文件
    (注解)组成的, 需要给对应的映射规则,它赋值发送SQL语句去执行,并返回结果
     * 
     */

    InputStream is;
    try {
        is = Resources.getResourceAsStream("myBatis.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        /**
         * 1. 获取映射器,让映射器通过命名空间和方法名称找到对应的SQL,发送给数据库执行并返回结构
         * 2. 直接通过命名信息去执行SQL返回结果,这是iBatis版本留下来的方法
         * 可以通过update,insert, select, delete。。。 ,带上SQL的id来操作XML文件
         * 中配置好的SQL完成数据库操作
         * commit rollback操作。。。
         * 
         */
        SqlSession session = sessionFactory.openSession();
        
        /**
         * 映射文件
         *  编写SQl语句并添加id
         *   映射器是由java接口和xml文件(注解)共同组成
         *      1.  定义参数类型
         *      2.描述缓存
         *      3. 描述SQl语句
         *      4. 定义查询结果和POJO的映射关系 
         */
                } catch (IOException e) {
              e.printStackTrace();
          }
    
    }
}

Mapper.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="org.lq.dao.DeptDao">
<!-- 
映射文件
    自动绑定JavaBean,只要你的SQL语句返回的列(字段) 和JavaBean的属性名保持一致
    select: 
        查询语句,最长用,最复杂,可以自定义参数hr自定义返回结果集
    insert :
        添加语句,执行后返回一个整数,代表插入
    update: 
        修改语句, 执行后返回一个整数,代表修改的条数
    delete : 
        删除语句, 执行后返回一个整数,代表删除的条数
    parameterMap : 
        定义参数映射关系,已被删除,不建议使用
    SQL:
        定义一部分的SQL语句然后在各个标签中引用
    resultMap
        描述数据块结果集和对象属性的映射关系,构造配置,集合配置,对象配置(.*hbm.xml)
    cache : 给命名空间的缓存配置
    cache-ref : 使用其他命名空间下面的配置信息

  -->
<!-- 

id : 它和mapper 的命名空间组合组合起来标识 唯一,提供给myBatis调用,如果不是唯一的启动抛出异常
parameterType : 可以填写类的权限定名称,也可以使用别名(需要在核心配置文件中配置),传递参数使用
parameterMap : 已废弃
resultType :定义类的权限定名称,默认自动配置, int, double, float 总条数就应该放回int类型
    int,double,float ...都是mybatis提供的别名
    int = java.long.Integer
resultMap : 设置返回映射集,将列和字段进行关联配置,一对多,多对一,一对一的配置也需要使用
flushCache : 在调用SQL后,是否要myBatis清空之前查询的本地缓存和二级缓存
useCache: 启动二级缓存的开关
timeout : 设置超时时间,如果超过指定的时间,抛出异常
fetchSize : 获取记录的总条数
statementType: 指定执行jdbc的对象
    -STATEMENT :
    -PREPARED:
    -CALLABLE : 调用存储过程的
autoMappingBehavior : 自动映射规则
    NONE : 取消自动映射
    PARTIAL :只会自动映射,没有定义嵌套集的映射
    FIULL : 会自动映射任何复杂的结果集,无论是否嵌套  
 --> 
 <insert id="save" parameterType="org.lq.entity.Dept">
    insert into dept
        (deptNo,dname, loc)
        values (dept_seq.nextval,#{dname},#{location})
 </insert>
 <!-- 
       keyProperty : 设定回填主键的列名
       useGeneratedKeys: mysql/sql server 获取自动增长的值
       selectKey : 自定义生成结果
    keyProperty : 临时存储查询结果的变量名称
    resultType : 查询返回的结果类型
    order : 先插入后再给属性赋值还是先给属性赋值在插入
        BEFORE : 先赋值 在插入,
        AFTER : 先插入在赋值
-->
   <insert id="save2" parameterType="org.lq.entity.Dept"  >
    <selectKey keyProperty="deptNo" resultType="int" order="AFTER">
        select dept_seq.nextval from dual           
    </selectKey>
    insert into dept
        (deptNo,dname, loc)
        values (#{deptNo},#{dname},#{location})
 </insert>
<!-- 
   设置实体类和字段的映射关系
id : 设置唯一标识
type : 指定映射的JavaBean
    id: 配置主键
    result : 配置属性和字段的关系

-->

<!-- 
    resultMap 
        contructor 构造
        id 
        result
        association  一 对象
        collection 多 集合
 -->   
 <resultMap type="org.lq.entity.Dept" id="depResult">
    <constructor>
        <arg column="dname" javaType="string"/>
        <arg column="loc" javaType="string"/>
    </constructor>
 </resultMap>
 
 <select id="getstru" resultMap="depResult">
    select * from dept
 </select>
 
 
<resultMap type="org.lq.entity.Dept" id="deptResultMap">
    <result property="location" column="loc"/>
</resultMap>

<select id="findAll"  resultMap="deptResultMap">
    select deptno, dname, loc location from dept
</select>


<select id="findDname" resultType="org.lq.entity.Dept">
    select * from dept where dname like '%'||#{a}||'%'
</select>

<select id="findDname2" resultType="org.lq.entity.Dept">
    select * from dept where dname like concat('%',concat(#{a},'%'))
</select>

<select id="findDname3" resultType="org.lq.entity.Dept">
    select * from dept where dname like '%${a}%'
</select>

<select id="findDeptByName" resultType="org.lq.entity.Dept">
    select * from dept where dname like '%${name}%' and deptNo > #{deptno}
</select>

<select id="findDeptByName1" resultType="org.lq.entity.Dept">
    select * from dept where dname like '%${param1}%' and deptNo > #{param2}
</select>

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

推荐阅读更多精彩内容