MyBatis的学习(一)

来源:互联网 发布:淘宝网电动车挡风被 编辑:程序博客网 时间:2024/05/17 08:23

1.Hibernate以及Mybatis/Ibatis 都是对jdbc的封装。

       JDBC的缺点:1.数据库链接使用时就创建,不使用就关闭。连给数据库库资源,影响数据库性能。

                                              可想到的解决方案:使用数据库的连接池

                              2.sql语句硬编码到了java代码中,如果sql要修改就需要重新编译

                                               可想到的解决方案:将sql语句放到配置文件中

                                    3. 传入参数以及获取结果时也存在将sql的硬编码

                                               可想到的解决方案:将占位符等也写到配置文件中并把查询结果映射为对象结果集

2.在使用Mybatis进行查询时传入参数如果是基础数据类型,那么没有问题。但是如果传入类型是String时,将 parameterType="java.lang.String"这样定义,会爆出在String类中没有当前参数的get方法的错误。因为不是pojo类,按理不应该有这错误。

                                            解决方案:1. 将string类型换成map类型的,然后将该keyword 放入该map中,不会报错


                                                                 2. 在接口中使用@Param(value="xxx") String xxx, 例如:public List<ArticleEntity> fuzzyFind(@Param(value = "keyword") String keyword);  也可以解决问题, 但是我这样写还是出现了同样的错误


                                                             3. 在配置文件中直接将keyword换成_parameter,问题解决。


推荐使用第三种。


3.在使用模糊查询时,${} 用来拼接字符串 like  ‘%${}%’  存在者sql注入的风险。还是使用#{}


4.目前MyBatis已经淘汰了parameterMape     统一改为 parameterType  下面是简单的Demo配置。MyBatis官方文档已经相当的完善,http://mybatis.github.io/ 可以在官网下选择版本进行查看下面是简单的Demo 配置文件

mybatis-config.xml

<?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="config/jdbc.properties"/>   <environments default="development">    <environment id="development">      <transactionManager type="JDBC"/>      <dataSource type="POOLED">        <property name="driver" value="${jdbc.driverClassName}"/>        <property name="url" value="${jdbc.url}"/>        <property name="username" value="${jdbc.username}"/>        <property name="password" value="${jdbc.password}"/>      </dataSource>    </environment>  </environments>  <mappers>    <mapper resource="config/mapper/Student_Mapper.xml"/>  </mappers></configuration>

DemoMapper.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="Student">    <resultMap type="main.student.model.Student" id="studentmap"><id column="id" property="id"/><result column="AGE" property="age"/><result column="STUDENTNAME" property="studentName"/></resultMap><sql id="selectStudentSql">   <![CDATA[   select * from t_student   ]]></sql><select id="selectStudentById" resultType="main.student.model.Student" parameterType="int"><include refid="selectStudentSql"></include>where id = #{id}</select><select id="selectStudentByName" resultType="main.student.model.Student" parameterType="string"><include refid="selectStudentSql"></include>where StudentName like '%${_parameter}%'</select><insert id="insertStudent" useGeneratedKeys="true" keyProperty="id">    <!-- <selectKey keyProperty="id" order="BEFORE" resultType="int">    select Last_insert_id()    </selectKey> -->insert into t_student(age,studentName) values(#{age},#{studentName})</insert><delete id="deleteStudent" parameterType="int">delete from t_student where id=#{id}</delete><update id="updateStudent" parameterType="main.student.model.Student">    update t_student set age=#{age},studentName=#{studentName} where id=#{id}</update><!-- <insert id="insert">    insert into users (id, name, funkyNumber, roundingMode) values (    #{id}, #{name}, #{funkyNumber}, #{roundingMode}    )</insert><resultMap type="org.apache.ibatis.submitted.rounding.User" id="usermap2"><id column="id" property="id"/><result column="name" property="name"/><result column="funkyNumber" property="funkyNumber"/><result column="roundingMode" property="roundingMode" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/></resultMap><select id="getUser2" resultMap="usermap2">select * from users2</select><insert id="insert2">    insert into users2 (id, name, funkyNumber, roundingMode) values (    #{id}, #{name}, #{funkyNumber}, #{roundingMode, typeHandler=org.apache.ibatis.type.EnumTypeHandler}    )</insert> --></mapper>



   

0 0
原创粉丝点击