Java框架:Mybatis:入门

发展介绍:https://github.com/mybatis/mybatis-3/releases

  • MyBatis是apache的一个开源项目iBatis, 实质上Mybatis对ibatis进行一些改进。
  • MyBatis是一个持久层框架,它对jdbc操作数据库的过程进行封装;开发者只需要关注SQL本身,不需要去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程。

原理:

Mybatis通过xml或注解方式将要执行的各种statement(statement、preparedStatement、CallableStatement)配置,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

 Mybatis执行流程

 配置文件

  • 全局配置:数据源、事务等
  • 映射配置:配置了SQL执行相关

全局配置:SqlMapConfig.xml

Mybatis配置文件头---可以从mybatis-3.x.x.pdf文件复制
<?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>

    <!-- 数据源信息可以用${}配置 ,下面写了,此处可不写   全局修改-->
    <!-- 读取数据库连接信息 -->
	<properties resource="db.properties"/>

	<!-- 配置mybatis的环境信息 -->
	<environments default="development">

		<environment id="development">
			<!-- 配置JDBC事务控制,由mybatis进行管理 -->
			<transactionManager type="JDBC"></transactionManager>
			
			<!-- 配置数据源,采用dbcp连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf8"/>
				<property name="username" value="root"/>
				<property name="password" value="12345"/>
			</dataSource>
			
            <!-- 配置数据源,采用dbcp连接池  配合 db.properties 全局修改-->
            <dataSource type="POOLED">
                <property name="driver" value="${driverClass}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${name}"/>
                <property name="password" value="${password}"/>
            </dataSource>

		</environment>
	</environments>
	
	<!-- mybatis加载映射文件-->
    <mappers>

        <package name="com.zjc.mapper"></package>

    </mappers>
	
	<!-- 配置别名 -->
    <typeAliases>
        
        <!-- 方式一:直接指定类名,自定义别名-->
        <typeAlias type="com.zjc.model.User" alias="user"></typeAlias>

        <!-- 方式二:指定包名时,别名就是类名的小写,例如 User类 别名就是user-->
        <package name="com.zjc.model"></package>
       
    </typeAliases>
	
</configuration>

typeAliases别名: 

  • 在映射文件中可以方便的去指定参数和结果集的类型

  • 方式一:直接指定类名,自定义别名  
  • 方式二:指定包名时,别名就是类名的小写,例如 User类 别名就是user

加载映射文件方式:

  • 方式一:写映射文件的名字(仅限dao方式)    <mapper resource="com/zjc/mapper/UserMapper.xml"></mapper>
  • 方式二:写类名,一定要有个映射文件与之对应  <mapper class="com.zjc.mapper.UserMapper"></mapper>
  • 如果没有,那么在UserMapper要声明注解(mapper.xml中的执行语句)(不建议)
  • 方式三:写包名  <package name="com.zjc.mapper"></package>(强力推荐)(mapper方式)

映射文件配置:User.xml映射文件 (com.zjc.mapper)

Mybatis的映射文件---可以从mybatis-3.x.x.pdf文件中复制
<?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="com.zjc.mapper.XxxMapper">

	<!-- 测试 -->
	<select id="findUserById" parameterType="int" resultType="com.zjc.model.User">
		SELECT * FROM USER WHERE id = #{id}
	</select>
	
</mapper>
  • id:statement的id,要求在命名空间内唯一  
  • parameterType:传入参数的java类型
  • resultType:查询出的单条结果集对应的java类型
  • #{}: 表示一个占位符?
  • #{id}:表示该占位符待接收参数的名称为id。如果参数为简单类型时,#{}里面的参数名称可以任意定义

resultType和resultMap关系

使用resultType进行结果映射时,列名和映射的pojo属性名完全一致,该列才能映射成功(全不为null),全部不一致,则不会创建pojo对象;有一个一致,就会创建pojo对象(部分为null);如果查询出来的列名和属性名不一致,可以通过定义一个resultMap将列名和pojo属性名之间作一个映射关系。  

  • <!--.设置返回数据为resultMap -->
    <resultMap id="userResultMap" type="user">
    	<id property="id" column="id_"></id>
    	<result property="username" column="username_"></result>
    	<result property="sex" column="sex_"></result>
    	<result property="birthday" column="birthday_"></result>
    	<result property="address" column="address_"></result>
    </resultMap>
    
    <select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">
    	SELECT
    	 id id_,
    	 username username_,
    	 sex sex_,
    	 birthday birthday_,
    	 address address_
    	FROM user WHERE id = #{id}
    </select>

 


 案例分析:

模糊查询   like '%${value}%'     value在方法调用传入

	<select id="findUserByName" parameterType="String" resultType="com.gyf.domain.User">
		SELECT * FROM USER WHERE username like '%${value}%'
	</select>
  • ${}:表示拼接SQL字符串
  • ${value}:参数为简单类型时,参数名称必须为value 
  • ${}会引起SQL注入,一般情况下不推荐使用。但是有些场景必须使用${},比如order by ${colname

 增删改

   <!--插入数据-->
    <insert id="insertUser" parameterType="com.zjc.model.User">
        INSERT INTO user (username,sex,birthday,address)
        VALUE (#{username},#{sex},#{birthday},#{address});
    </insert>

    <!--删除-->
    <delete id="deleteUser" parameterType="int">
        DELETE FROM user where id = #{id};
    </delete>

    <!--更新-->
    <update id="updateUser" parameterType="com.zjc.model.User">
        UPDATE user SET address = #{address},sex = #{sex}
        WHERE id = #{id}
    </update>

主键返回:自增主键 :获取到刚插入的自增主键

<insert id="insertUser" parameterType="com.zjc.model.User">

		<selectKey keyProperty="id" resultType="int" order="AFTER">
			SELECT LAST_INSERT_ID()
		</selectKey>

		INSERT INTO USER (username,sex,birthday,address) 
		VALUES(#{username},#{sex},#{birthday},#{address})

</insert>
  • selectKey标签:通过select查询来生成主键
  • keyProperty:自增主键对应数据库列名
  • resultType:主键所对应的Java类型
  • order:指定查询主键SQL语句的执行顺序,after==执行完insert查询语句返回主键
  • last_insert_id:MySQL的函数,要配合insert语句一起使用

主键返回:自增UUID 

<insert id="insertUser" parameterType="com.zjc.model.User">

		<selectKey keyProperty="id" resultType="String" order="BEFORE">
			SELECT UUID()
		</selectKey>

		INSERT INTO USER (username,sex,birthday,address) 
		VALUES(#{username},#{sex},#{birthday},#{address})
</insert>

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值