MyBatis

Mybatis学习笔记17 - sql标签和include标签

故事扮演 提交于 2020-03-05 01:11:00
示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; import org.apache.ibatis.annotations.Param; import java.util.List; public interface EmployeeMapper { public void addEmps(@Param("emps") List<Employee> emps); } mapper定义: <?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.mybatis.dao.EmployeeMapper"> <insert id="addEmps"> insert into tbl_employee( <include refid="insertSql"/> ) values <foreach collection="emps" item="emp" separator=","> (#{emp.lastName},#

mybatis expected at least 1 bean which qualifies as autowire candidate for this dependency

你说的曾经没有我的故事 提交于 2020-03-05 00:35:28
错误原因:没有引入相应mapper接口,导致spring没有找到依赖 解决方法一:使用注解的方法: 首先在spring配置文件中添加 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.forum" /> <property name="annotationClass" value="org.springframework.stereotype.Repository" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> 然后在mapper接口中添加注解 @Transactional @Repository public interface RoleMapper 解决方法二:使用xml配置 定义mapper的bean <!— mapper bean --> <bean id="roleMapper" class="org.mybatis.spring.MapperFactoryBean"> <property name="mapperInterface" value="com.forum.dao.RoleMapper

MyBatis:入门及第一个程序

做~自己de王妃 提交于 2020-03-04 22:22:24
MyBatis:入门及第一个程序 本人使用 环境 : jdk 1.8 MySql 5.0.8(+Navicat for MySQL) IDEA Maven 3.1.1 一、什么是 Mybatis ? MyBatis 是一款优秀的 持久层框架 。 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程 MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象】映射成数据库中的记录。 MyBatis 本是apache的一个开源项目ibatis, 2010年这个项目由apache 迁移到了google code,并且改名为MyBatis 。 2013年11月迁移到 Github 。 Mybatis官方文档 : http://www.mybatis.org/mybatis-3/zh/index.html GitHub : https://github.com/mybatis/mybatis-3 为什么需要Mybatis Mybatis就是帮助程序猿将数据存入数据库中 , 和从数据库中取数据 . 传统的jdbc操作 , 有很多重复代码块 .比如 : 数据取出时的封装 , 数据库的建立连接等等… , 通过框架可以减少重复代码,提高开发效率 .

mybatis查询sql语句

雨燕双飞 提交于 2020-03-04 18:07:35
mybatis查询SQL语句中的影射 如果查询的sql语句为空,则返回值的字段是不显示的 解决办法就是 (case when 字段名 is null then 0 else 字段名 end) AS 别名 来源: CSDN 作者: chang2p 链接: https://blog.csdn.net/chang2p/article/details/104655134

Mybatis3.3.x技术内幕(十一):执行一个Sql命令的完整流程

混江龙づ霸主 提交于 2020-03-04 17:36:54
Mybatis中的Sql命令,在枚举类SqlCommandType中定义的。 public enum SqlCommandType { UNKNOWN, INSERT, UPDATE, DELETE, SELECT, FLUSH; } 下面,我们以Mapper接口中的一个方法作为例子,看看Sql命令的执行完整流程。 public interface StudentMapper { List<Student> findAllStudents(Map<String, Object> map, RowBounds rowBounds, ResultSetHandler rh); } 参数RowBounds和ResultSetHandler是可选参数,表示分页对象和自定义结果集处理器,一般不需要。 一个完整的Sql命令,其执行的完整流程图如下: (Made In Edrawmax) 对于上面的流程图,如果看过前面的博文的话,大部分对象我们都比较熟悉了。一个图,就完整展示了其执行流程。 MapperProxy的功能: 1. 因为Mapper接口不能直接实例化, MapperProxy的作用,就是使用JDK动态代理功能,间接实例化Mapper的proxy对象。可参看系列博文的第二篇。 2. 缓存 MapperMethod对象。 private final Map<Method,

mybatis 主流程时序图(一)

风流意气都作罢 提交于 2020-03-04 17:27:31
mybatis通过sqlSessionManager管理器对SqlSession进行管理,SqlSession包含了与数据库连接、事务和所有映射的配置信息; 以下是生成SqlSession的调用链: SqlSessionManager的类 field: sqlSessionFactory:sqlSession工厂类 sqlSessionProxy:sqlSession代理类 localSqlSession:线程变量 method: newInstance(...) :实例化SqlSessionManager,构造函数私有化 startManagedSession(...):将sqlSession存入线程变量中 openSession(...):创建sqlSession select/update/delete/insert:使用sqlSessionProxy执行 getConnection/clearCache/commit/rollback/close:localSqlSession.get()获取的sqlSession执行 SqlSessionInterceptor:创建sqlSessionProxy的InvocationHandler; 当localSqlSession.get()有值时,执行invoke方法; 反之,调用openSession方法,并主动执行commit方法

MyBatis入门示例

半城伤御伤魂 提交于 2020-03-04 17:25:12
说明: 1,本文采用的Mybatis框架版本为: mybatis-3.0.4.jar 2, 以持久化一个简单的User bean为例 User实体类的代码如下: package bean; public class User { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public User(String name, Integer age) { super(); this.name = name; this.age = age; } public User() { super(); } //必须要有这个无参构造方法,不然根据UserMapper.xml中的配置,在查询数据库时,将不能反射构造出User实例 } User 实体的映射器取名为UserMapper(接口),其代码如下 package Mapper; import bean.User; public

Mybatis中的update动态SQL语句

痞子三分冷 提交于 2020-03-04 17:21:22
Mybatis中的update动态SQL语句 Mybatis中的CRUD操作(增删改查)中,简单的SQL操作比较直观,如查找操作: <select id="findBySrcId" resultMap="entityRelationResultMap"> SELECT * FROM ENTITY_RELATION WHERE SRC_ID=#{srcId} </select> 其中id对应同名java文件中的方法,resultMap对应的自定义的数据类型(当使用java自带类型就更容易了,比如java.lang.String之类的)。 但是涉及到更新操作时,可能不需要对所有字段更新,这时不需要更新的字段需要保持原字段信息,当使用以下信息就会报错: <update id="updateOne" parameterType="com.inspur.search.data.EntityRelation"> update ENTITY_RELATION SET SRC_ID=#{srcId},SRC_TYPE=#{srcType},DEST_ID=#{destId}, DEST_TYPE=#{destType},REL_TYPE=#{relType},STATUS=#{status},SN_ID=#{snId} where id=#{id} </update> 因为不更新的字段

mybatis 快速上手《1》

爱⌒轻易说出口 提交于 2020-03-04 14:16:14
目录 1.MyBatis 2.执行步骤 3.常用参数 4.mapper xml files 5.缓存机制 1.MyBatis 将编写sql的功能开放给程序员,别的类似预编译,设置参数,执行sql了,封装结果 步骤由框架自己完成。是一个半自动的轻量级的框架。 2.执行步骤 SqlSessionFactoryBuilder,通过全局配置文件创建SqlSessionFactory SqlSessionFactory打开一个会话,创建SqlSession SqlSession操作接口的mapper,对数据库完成增删改查操作。 注意 :1.sqlSession 不是线程安全的,每次使用都应该获取新的对象。 小技巧:让公共配置文件有提示:添加对应的dtd文件,在window-》preference-》xml->xml catalog 添加对应dtd文件 3.常用参数及标签 参考: mybatis官方配置文件 3.1 开启驼峰命名 <setting name="mapUnderscoreToCamelCase" value="true"/> 解释:可以让数据库字段column以驼峰命名规则映射到JavaBean对象的属性中。例如:dept_name ->deptName; 3.2 typeAliases <!-- 不用别名时, resultType 需要指定权限定名--> <select id=

聊一聊MyBatis 和 SQL 注入间的恩恩怨怨

筅森魡賤 提交于 2020-03-04 12:19:03
整理了一些Java方面的架构、面试资料(微服务、集群、分布式、中间件等),有需要的小伙伴可以关注公众号【程序员内点事】,无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 面试总被问分库分表怎么办?你可以这样怼他 3万字总结,Mysql优化之精髓 为了不复制粘贴,我被逼着学会了JAVA爬虫 技术部突然宣布:JAVA开发人员全部要会接口自动化测试框架 Redis 5种数据结构及对应使用场景,全会面试要加分的 引言 MyBatis 是一种持久层框架,介于 JDBC 和 Hibernate 之间。通过 MyBatis 减少了手写 SQL 语句的痛苦,使用者可以灵活使用 SQL 语句,支持高级映射。但是 MyBatis 的推出不是只是为了安全问题,有很多开发认为使用了 MyBatis 就不会存在 SQL 注入了,真的是这样吗? 使用了 MyBatis 就不会有 SQL 注入了吗? 答案很明显是 NO。 MyBatis它只是一种持久层框架,它并不会为你解决安全问题。当然,如果你能够遵循规范,按照框架推荐的方法开发,自然也就避免 SQL 注入问题了。本文就将 MyBatis 和 SQL 注入这些恩恩怨怨掰扯掰扯。(注本文所说的 MyBatis 默认指的是 Mybatis3) 技术背景 写本文的起源主要是来源于内网发现的一次 SQL 注入。我们发现内网的一个请求的