【第22期】观点:IT 行业加班,到底有没有价值?

mybatis的mapping基本相关操作

原创 2015年11月18日 09:33:05

本文章的demo用map代替了javabean,其实javabean的属性和值就相当于map的key-value,所以就不那么麻烦用javabean了。闲话少说,程序员就是要的干脆利落,上代码再说:

1、测试类

/**
 * Created by wolf on 15/11/12.
 */
public class UserTestDemoService extends MybatisSupportBaseService {

    public static int saveAndUpdate(Map map) {

        SqlSessionManager manager = getSqlSessionManager();
        SqlSession session = manager.openSession(false);
        try {
            session.insert("test.saveUser", map);
            session.update("test.updateUser", map);
            session.commit();
        } catch (Exception e) {
            session.rollback();
            e.printStackTrace();
        }finally {
            session.close();
        }

        return 1;
    }

    public static Map queryUser(Map map) {
        return selectOne("test.queryUser", map);
    }

    public static List selectUser(Map map) {
        return selectList("test.selectUser", map);
    }

    public static List whereUser(Map map) {
        return selectList("test.whereUser", map);
    }
    public static int setUpdateUser(Map map) {
        return update("test.setUpdateUser", map);
    }

    public static List selectIn(Map map) {
        return selectList("test.selectIn", map);
    }

    public static void main(String[] args) {
        Map m = new HashMap();
        /*m.put("id", "wolf001");
        m.put("user_name", "wolf_bin1111");
        m.put("user_id", "wolf_id");
        m.put("user_age", "22");*/

        String[] arr = new String[]{"002","001"};
        m.put("list", arr);
//        System.out.println(saveAndUpdate(m));
//        System.out.println(queryUser(m));
//        System.out.println(selectUser(m));
//        System.out.println(whereUser(m));
//        System.out.println(setUpdateUser(m));
        System.out.println(selectIn(m));
    }
}

2、mapping文件test.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="test">
    <sql id="userAtr">
        #{id},#{user_id},#{user_name},#{user_age}
    </sql>
    <sql id="userPro">
        id,user_id,user_name,user_age
    </sql>

    <insert id="saveUser" parameterType="java.util.HashMap">
        insert into t_test_user (<include refid="userPro"></include>)
        values (<include refid="userAtr"></include>)
    </insert>

    <update id="updateUser" parameterType="java.util.HashMap">
    UPDATE TABLE t_test_user SET user_name=#{user_name} WHERE id=#{id}
    </update>

    <select id="queryUser" parameterType="java.util.HashMap" resultType="java.util.HashMap">
        SELECT
        <include refid="userPro"></include>
        FROM t_test_user
        WHERE 1=1
        <if test="user_name != null">
            AND user_name LIKE '%${user_name}%'
        </if>
    </select>

    <select id="selectUser" parameterType="java.util.HashMap" resultType="java.util.HashMap">
        SELECT <include refid="userPro"></include> FROM t_test_user
        WHERE 1=1
        <choose>
            <when test="id!=null">
                AND id=#{id}
            </when>
            <when test="user_name != null">
                AND  user_name LIKE  '%${user_name}%'
            </when>
            <otherwise>
            </otherwise>
        </choose>
    </select>

    <select id="whereUser" parameterType="java.util.HashMap" resultType="java.util.HashMap">
        SELECT
        <include refid="userPro"></include>
        FROM t_test_user
        <where>
            <if test="user_name != null">
                user_name LIKE '%${user_name}%'
            </if>
            <if test="user_age != null">
                AND user_age = #{user_age}
            </if>
        </where>
    </select>

    <select id="selectIn" resultType="java.util.HashMap">
        SELECT *
        FROM t_test_user
        WHERE ID in
        <foreach item="item" index="index" collection="list"
                 open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>

    <update id="setUpdateUser" >
        UPDATE  t_test_user
        <trim prefix="set" suffixOverrides=",">
            <if test="user_name != null">user_name=#{user_name},</if>
            <if test="user_age != null">user_age=#{user_age},</if>
        </trim>
        WHERE user_id = #{user_id}
    </update>
</mapper>

3、读取mybatis配置类

public class MybatisSupportBaseService{
    private static SqlSessionManager manager;
    //初始化sqlSessionFactory sqlsessionFactory只有一个实例
    static {
        String resource = "SqlMapConfig.xml";
        Reader reader = null;
        try {
            reader = Resources.getResourceAsReader(resource);
        } catch (IOException e) {
            logger.error("加载mybatis配置异常", e);
        }
        manager = SqlSessionManager.newInstance(reader);
    }

    /**
     *  通过获取SQLSessionFactory openSqlSession实例 自由控制事物
     * @return
     */
    public static SqlSessionManager getSqlSessionManager(){
        return manager;
    }
 }
4、mybatis配置SqlMapConfig.xml
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<settings>
		<setting name="jdbcTypeForNull" value="NULL" />
	</settings>
	<plugins>
		<!-- com.github.pagehelper为PageHelper类所在包名 -->
		<plugin interceptor="com.github.pagehelper.PageHelper">
			<!--<property name="dialect" value="mysql"/>-->
			<!-- 该参数默认为false -->
			<!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
			<!-- 和startPage中的pageNum效果一样-->
			<property name="offsetAsPageNum" value="true"/>
			<!-- 该参数默认为false -->
			<!-- 设置为true时,使用RowBounds分页会进行count查询 -->
			<property name="rowBoundsWithCount" value="true"/>

			<!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
			<!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)
            <property name="pageSizeZero" value="true"/>-->
			<!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
			<!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
			<!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
			<property name="reasonable" value="true"/>
			<!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
			<!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
			<!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值 -->
			<!-- 不理解该含义的前提下,不要随便复制该配置
            <property name="params" value="pageNum=start;pageSize=limit;"/>    -->
		</plugin>
	</plugins>
	<!-- 配置Mybatis的环境,事务及数据源等等 -->
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="DataSourceAdapterFactory">
			</dataSource>
		</environment>
	</environments>
	
	<!-- 指定映射文件或者映射类 -->
	<mappers>
		<mapper resource="test.xml"/>
	</mappers>

</configuration>
5、读取资源数据库资源类
public class DataSourceAdapterFactory implements DataSourceFactory {
    public DataSourceAdapterFactory() {
    }

    public DataSource getDataSource() {
        try {
            Properties e = PropertiesUtil.loadPropertyFile("druidconfig.properties");
            return DruidDataSourceFactory.createDataSource(e);
        } catch (Exception var2) {
            var2.printStackTrace();
            return null;
        }
    }

    public void setProperties(Properties properties) {
    }
}

6、数据库资源文件druidconfig.properties

url:jdbc:oracle:thin:@127.0.0.1:1521:test
driverClassName:oracle.jdbc.driver.OracleDriver
username:root
password:root
initialSize:1
maxActive:20
minIdle:10
maxWait:60000
useUnfairLock=true
基本上就完成了。


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

MyBatis学习4---使用MyBatis_Generator生成Dto、Dao、Mapping

由于MyBatis属于一种半自动的ORM框架,所以主要的工作将是书写Mapping映射文件,但是由于手写映射文件很容易出错,所以查资料发现有现成的工具可以自动生成底层模型类、Dao接口类甚至Mappi...
  • wyc_cs
  • wyc_cs
  • 2013-06-04 16:30
  • 125978

MyBatis Generator 详解

MyBatis Generator中文文档 MyBatis Generator中文文档地址: http://generator.sturgeon.mopaas.com/ 该中文文档由于尽可能...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

使用Mybatis-Generator自动生成Dao、model和mapper.xml相关文件

之前使用mabatis也写过mybatis的mapper.xml文件和model类以及dao文件,基本的insert等语句都是要自己写的,这样会比较容易出错,比如说:字段写错了,xml文件出错了。 注...

MyBatis DAO层传递参数到mapping.xml

总结我所用到的MyBatis,Dao层传递参数到mapping.xml文件的几种方式: 第一种:传递单个参数 Dao层Code片段: /** * 根据articleId查询XXXX详情. *...

Mybatis 3.1中 Mapper XML 文件 的学习详解

MyBatis 真正的力量是在映射语句中。这里是奇迹发生的地方。对于所有的力量,SQL 映射的 XML 文件是相当的简单。当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约...

Mybatis-Spring-注入映射器

注入映射器 为了代替手工使用 SqlSessionDaoSupport 或 SqlSessionTemplate 编写数据访问对象 (DAO)的代码,MyBatis-Spring 提供了一个动态...

mybatis学习总结级及Mybatis中autoMapping与autoMappingBehavior的区别与联系

Mybatis中autoMapping与autoMappingBehavior的区别与联系 一.autoMappingBehavior 指定 MyBatis 应如何自动映射列到字段或属...

深入了解MyBatis参数

相信很多人都遇到过下面这些异常:"Parameter 'xxx' not found. Available parameters are [...]"等等 不只是上面提到的这几个,我认为有很多的错误都...

Mybatis系列(三)简单示例

Mybatis简单使用示例 经过前两篇文章《Mybatis入门》和《Mybatis配置》的介绍,我们对Mybatis有了一定的了解,下面就接合一个实例学习案例,来巩固一下我们前面学习的知识。 环境搭建...

cookie mapping原理及应用

1. 背景 在广告业务中,随着AdExchange和DMP的出现,一条广告的竞价和曝光经由多个平台和合作方合作完成。而多个合作方都有各自的账号系统,且不是互通的,比如流量方与广告主都各自有自己的账号...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)