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>
- MyBatis的学习(一)
- myBatis的学习(一)
- Mybatis的学习(一)
- mybatis学习(一)
- MyBatis学习(一)
- MyBatis学习(一)
- 学习Mybatis(一)
- mybatis学习(一)
- mybatis学习(一)
- mybatis学习(一)
- mybatis的学习认知(一)
- mybatis的学习认知(一)
- mybatis的学习总结(一)
- 【Mybatis学习总结一】Mybatis的helloworld
- MyBatis学习(一)- 搭建MyBatis项目
- MyBatis学习(一)- 搭建MyBatis项目
- (一)mybatis学习之初识mybatis
- Mybatis学习笔记--(一)Mybatis基础
- poj1145(二叉树
- eclipse解决乱码问题
- CS281: Advanced Machine Learning 第二节 Generative model
- rust 学习入门
- sublime text 3 编译运行java代码方法
- MyBatis的学习(一)
- 2111 Saving HDU【贪心】
- 图像局部显著性—线特征
- Android Api Demos登顶之路(十三)Presentation With Media Router
- 马尔科夫之前向算法
- 体验cocos2d关节的地址
- Triangle
- php学习笔记_4_常量及魔法常量需要注意的点
- 如果 40 岁了还在写代码,是一种幸福,还是一种悲哀?