Mybatis

1. id属性与定义的接口方法名一样,Mybatis通过这种方式将接口方法与xml中定义的sql语句联系在一起
         接口方法只可以重载的,但是id不能重复,在同名方法中,增加一个RowBound类型的参数用于实现分页查询
         resultMap用来配置java对象的属性和查询结果列对应的关系

    <select id="selectById" resultMap="userMap">
        select * from sys_user where id=#{id}

    </select>

2. 设置别名,使其自动映射 -->

 

   <select id="selectAll" resultType="tk.myBatis.simple.model.SysUser">
        select id,
            user_name ,
            user_password ,
            user_info ,
            head_img ,
            create_time
        from sys_user
        

    </select>

3.  在设置property属性时,可以不考虑大小写,一般是将其现全转化为大写,进行对比 -->

    <result property="username" column="user_name"/>

<!-- logImpl屬性配置指定使用LOG4J輸出日誌 -->
    <settings>
        <setting name="logImpl" value="LOG4J" />
        <setting name="mapUnderscoreToCamelCase" value="true" />
        <!-- 通过这个属性可以将一下划线方式命名的数据库列映射到Java对象的驼峰式明明属性中 -->
    </settings>
    <typeAliases>
       <package name="tk.mybatis.simple.model"/>
    </typeAliases>

1.数据库  date 、time、datatime对应JDBC类型分别为DATE、TIME、TIMESTAMP

2.获取当前时间

user.setCreateTime(new Date());
#{createTime,jdbcType=TIME}
2018-04-12 09:34:22.056(Timestamp)
2018-04-12(Date);

3.mysql获取自增的主键id
<!-- 获取主键自增的id -->
	<insert id="insert2" useGeneratedKeys="true" keyProperty="id">
		insert into sys_user(
			user_name,user_password,user_email,user_info,head_img,create_time)
			values(
			#{userName},#{userPassword},#{userEmail},#{userInfo},#{headImg,jdbcType=BLOB},
			#{createTime,jdbcType=TIMESTAMP}
			)
	</insert>

mysql非自增

<insert id="insert3" useGeneratedKeys="true" keyProperty="id">
		insert into sys_user(
			user_name,user_password,user_email,user_info,head_img,create_time)
			values(
			#{userName},#{userPassword},#{userEmail},#{userInfo},#{headImg,jdbcType=BLOB},
			#{createTime,jdbcType=TIMESTAMP}
			)
		<selectKey keyColumn="id" resultType="long" keyProperty="id" order="AFTER">
                SELECT LAST_INSERT_ID()//用于获取数据库中最后插入的数据的ID值
//oracle:  select seq_id.nextval from dual//获取序列的sql语句
        </selectKey>
注意:
order的属性的设置和适用的数据库相关,在MYSQL数据库中,order属性设置的值是AFTER,因为当前记录的的主键值在inert语句执行成功后才能获取到
                        在ORACLE数据库中,order旳值为BEFORE,因为 Oracle要先从序列获取值,然后将值作为主键,插入到数据库中

测试语句

	@Test
	public void testInsert3() {
		SqlSession sqlSession=getSqlSession();
		try {
			UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
			SysUser user=new SysUser();
			user.setUserName("test1");
			user.setUserPassword("123456");
			user.setUserEmail("test@mybatis.tk");
			user.setUserInfo("test info");
			user.setHeadImg(new byte[] {1,2,3});
			user.setCreateTime(new Date());
			int result=userMapper.insert3(user);
			Assert.assertEquals(1, result);
			Assert.assertNotNull(user.getId());
		}finally {
			sqlSession.rollback();
			sqlSession.close();
		}

Mybatis 动态sql

XML标签:if、choose(when、otherwise)、trim(where 、set)、foreach、bind

可以实现多条件查询、只更新更改的的字段、未插入的值使用默认值

foreach实现批量插入、动态更新

bind实现多数据库支持

Mybatis 代码生成器

  1. mybatis-generator-config_1_0.dtd用于定义改配置文件中所有标签和属性的用法和限制,文件头后,
        需要写上xml文件的根节点  :<generatoeConfiguration>

  2.  mybatis自定义配置 顺序:properties、classPathEntry、context
       <1> properties 用来指定外部的属性元素,最多可以配置一个,也可以不配
       <2> classPathEntry最常见的用法是通过属性location制定驱动的路径
       <3> context用于指定生成一组对象的环境,例如指定要连接的数据库、要生成对象的类型和要处理的数据库中的表
           context的可选属性,defaultModelType定义如何生成实体类,
               flat:为每张表生成一个实体类-->               

<context id="MySql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
                        <property name="autoDelimitKeywords" value="true"/>
                        <property name="beginningDelimiter" value="'"/>

                </context>

3. commentGenerator  标签用来配置如何生成注释信息,最多可以配置一个,一般关闭mybatis自动生成的注释

<commentGenerator>

    <property name="supressDate" value="true" />//阻止生成注释包含时间戳

    <property name="addRemarkComments" value="true" />//注释是否添加数据库表的备注信息

</commentGenerator>
4. jdbcConnection 标签用于指定Mybatis要连接的数据库信息,必选并只能有一个。
<jdbcConnection connectionURL="jdbc:oracle:thin:@172.20.94.204:1521:icreative"
			driverClass="oracle.jdbc.driver.OracleDriver" 
                           password="itm" 
                        userId="itm" />
存储过程
存储过程处理比较复杂的业务时比较实用。比如说,一个复杂的数据操作。如果你在前台处理的话。可能会涉及到多次数据库连接。但如果你用存储过程的话。就只有一次。从响应时间上来说有优势。
也就是说存储过程可以给我们带来运行效率提高的好处。
<select id="selectUserById" statementType="CALLABLE" useCache="false">
		{call select_user_by_id(
			#{id,mode=IN},//oracle数据库,入参存在null的情况,那么入参也必须指定jdbcType
			#{userName,mode=OUT,jdbcType=VARCHAR},
			#{userPassword,mode=OUT,jdbcType=VARCHAR},
			#{userEmail,mode=OUT,jdbcType=VARCHAR},
			#{userInfo,mode=OUT,jdbcType=VARCHAR},
			#{headImg.mode=OUT,jdbcType=VARCHAR,javaType=_byte[]}
			#{createTime,mode=OUT,jdbcType=TIMESTAMP}
		)}
	</select>







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值