JAVA-MyBatis ORM】的更多相关文章

最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User(); user.setUserName("chenzhou"); user.setPassword("xxxx"); user.setComment("测试插入数据返回主键功能"); System.out.println("插入前主键为:…
今天在java mybatis项目中遇到一个问题,“java mybatis Column 'AAA' in where clause is ambiguous”, 这是由于在多表连接查询的时候,遇上有相同的字段,这个需要设置一下表名的前缀: 例: select * from lw_table lt where lt.column =  'xxxx' 在相关的地方加上lt前缀就可以了.这个错误也提醒开发写条件语句的时候最好是附上表明的前缀.…
一.Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去 设置参数和获取检索结果.MyBatis能够使用简单的XML格式或者注解进行来配置,能够映射基本数据元素.Map接口和POJOs(普通java对 象)到数据库中的记录. 二.MyBatis工作流程 (1)加载配置并初始化 触发条件:加载配置文件 配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个…
写之前的说明 其实吧. 这个东西已经写好了,地址在:https://github.com/hjx601496320/JdbcPlus 这系列文章算是我写的过程的总结吧.(恩系列,说明我可能会写好久,╮(╯▽╰)╭) 现在有很多的现成的orm框架,为什么还要自己写一个? 框架这种东西个人认为想要了解其中的原理,还是要自己尝试实现一个来的比较快.我是那种不爱看源码的程序员,除非是有些地方实在没有思路或者网上也找不到相关的文章,否则是不会去看源码的.懒--~ 写这个的目的是什么? 现在流行的orm比如…
一.实现手写Mybatis三个难点 1.接口既然不能被实例化?那么我们是怎么实现能够调用的? 2.参数如何和sql绑定 3.返回结果 下面是Mybatis接口 二.Demo实现 1.创建Maven工程(开发工具Eclipse) 下一步 下一步 然后点击“完成” 2.配置pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema…
Map<String, Object> bindinfo = new HashMap<String, Object>();            bindinfo.put("loginid", loginid);            bindinfo.put("loginrole", loginrole);            bindinfo.put("cardnumber", cardnumber);      …
一.单个参数: public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean"> select t.* from tableName t where t.id= #{id} </select> 其中方法名和ID一致,…
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; public class DynamicDataSource extends AbstractRoutingDataSource{ @Override protected Object determineCurrentLookupKey(){ return DynamicDataSourceHolder.getDbType(); } } imp…
创建映射关系 ​ 想要实现一个orm的功能,我觉得就是要将class和数据库中的表创建映射关系.把class的名称和表的名称,class属性名称和表的字段名称,属性类型与表的字段类型一一对应起来.可以通过配置文件,注解等等各种方式实现这个映射关系. 需要的依赖 ​ 因为编写配置文件总是一件十分繁琐的事情,所以我决定使用注解的方式来实现这个映射.在项目刚开始写的时候我用的是自定义注解的方法.自己规定一套注解,后来觉得这样没有太大的必要,因为已经有jpa里的一套注解.所以直接用就好了.所以添加依赖:…
1.引入maven包 和 导入 sqljdbc包 <dependency> <groupId>org.apache.ibatis</groupId> <artifactId>ibatis-sqlmap</artifactId> <version>3.0-beta-10</version> </dependency> sqljdbc官方地址:https://www.microsoft.com/zh-cn/down…
insertSelective---Java MyBatis 插入数据库返回主键--insertSelective这样就不用每次到数据库里面查询了 https://www.cnblogs.com/xingyunblog/p/6243179.html 列子: <!-- 插入一个商品 --> <insert id="insertProduct" parameterType="domain.model.ProductBean" > <sele…
mybatis简单使用记录一下 mybatis官网:http://www.mybatis.org/mybatis-3/ 参考博客:https://blog.csdn.net/iku5200/article/details/82856621 配置 application.properties mybatis.mapper-locations:classpath:/mapping/*.xml mybatis.config-location:classpath:/mybatis-config.xml…
在MySql设定两张表,其中product表的主键设定成orderTb表的外键,具体如下: 产品表: create table product(id INT(11) PRIMARY KEY,name VARCHAR(32) ); 订单表: create table orderTb(id INT(11) PRIMARY KEY,productid INT(11), FOREIGN KEY(productid) REFERENCES product(id) ): 给产品表插入数据如下: 给订单表插入…
生成xml文件,文件名generator.xml <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-conf…
简介 自学的[狂神JAVA]MyBatis GitHub源码: https://github.com/Donkequan/Mybatis-Study 分享自写源码和笔记 配置用的 jdk13.0.2 (jdk1.7以上均可) Maven MySQL 5.7 (mysql5.6以上均可) 1. 配置 官网文档: https://mybatis.org/mybatis-3/zh/getting-started.html pom.xml <?xml version="1.0" enco…
目录 搭建环境 编写 Mybatis 核心配置文件 pom导出资源失败 测试 搭建环境 新建Maven项目 导入Maven依赖 <dependencies> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version&g…
先创建数据库和表,使用的是MySQL数据库. create database mybatis; use mybatis; CREATE TABLE `accountdo` ( `id` varchar(255) NOT NULL COMMENT '账户', `name` varchar(255) DEFAULT NULL COMMENT '用户姓名', `sex` varchar(255) DEFAULT NULL COMMENT '性别', `tele` varchar(255) DEFAUL…
具体请参照: http://blog.csdn.net/fengshizty/article/details/43086833 按照上面博客地址,下载Generator的依赖包: 如下是我的配置文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Co…
由于公司要求,最近从.net向java 转,然后过程中遇到各种奇葩问题,特在此随记一番. 场景:一个方法中有两个参数,一个List的集合,一个int 类型的参数,最初我在xml的sql参数,无论定义成List还是int都报错,其实仔细一想就能明白,接口方法中定义了两个类型的参数,所以你XML中的参数类型无论定义成什么都是不对的. 原始写法: //========================这个例子是原始错误写法的例子===========Start void batchUpdateUrget…
<selectKey keyProperty="id" resultType="java.lang.Long" order="AFTER" > SELECT LAST_INSERT_ID() </selectKey> 这段代码包含在<insert></insert>当中 <insert></insert> 中没有resultType属性,但是<selectKey>…
在这里学习 >>mybatis 简介和入门[视频免费观看] >>http://legend2011.blog.51cto.com/3018495/908956[MyBatis学习笔记系列] >>WebFRK-ibatis  …
生成sql:select 上一篇讲了怎样生成一个sql中where的一部分,之后我们要做事情就简单很多了,就只要像最开始一样的生成各种sql语句就好了,之后只要再加上我们需要的条件,一个完整的sql就顺利的做好了. 现在我们开始写生成查询语句的sql.一个查询语句大致上是这样的: SELECT name, id, create_date, age, mark, status FROM user 这里可以看出来,一个基础的查询语句基本上就是一个 SELECT 后面加上需要查询的字段,跟上 FROM…
生成sql:where 上一篇里我们实现了生成insert的sql,下面要开始实现update,delete,select的sql语句了.但是这些语句有一个比较麻烦的地方是:它们一般后面都会有where条件,因为在执行的时候不能把表里所有的数据都进行操作. 所以这里我们需要先生成条件的sql.大概是这样的: WHERE id = ? AND name != ? OR age >= ? where 后面的参数继续用 "?" 代替.值就放在一个有序的集合中就好了.类似上一篇提到的in…
使用反射解析class 上一篇我们完成了class到表映射关系的建立,但是这个并不能被代码正确处理,我们还需要让程序能够正确的识别这些映射关系. 这一篇主要讲的是建立一个从class到表的模型,使我们在class上添加的注解能够正确的被识别并处理.这里主要用到的是java中的反射相关的知识.不了解的同学请自行百度一下,不是很难-,另外这一篇也会稍微的提到一点反射的用法. 现在开始. 我们主要的需求是根绝我们添加的注解,生成各种类型的sql语句,所以我们首先要能够获取添加在java类名,属性,方法…
<select id="find1" parameterType="java.util.HashMap" resultType="com.xxx.User"> SELECT * FROM users a WHERE a.userid IN <foreach item="item" index="index" collection="userIds" open="…
0 引言 本文主要介绍有关MyBatis的缓存. 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 1. 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空. 2. 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap存储,不同在于其存储作用域为 Mapper(Namespace…
方式一:通过properties 元素的子元素来传递数据 例如: <properties> <property name="driver" value="com.mysql.jdbc.Driver" /> <!-- 驱动类型 --> <property name="url" value="jdbc:mysql://localhost:3306/sam" /> <!-- 连接…
当遇见java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for 错误的时候不要慌张,仔细检查下面两样是否匹配: 1. Mapper的namespace是否和定义的一致? <mapper namespace="com.sitech.mapper.UserInfo"> 2. mapper的xml文件名称是否和定义的interface名称一致? 只要这两项…
示例: like concat('%',#{groupName},'%') //-------------- <select id="findList" resultType="com.thinkgem.jeesite.modules.rule.entity.RuleCombinationModel"> SELECT <include refid="cmsGuestbookColumns"/> FROM t_zg_rule…
//-------------------------------查询-------------------------------------// <sql id="cmsGuestbookColumns"> a.id AS "id", a.GROUP_NUMBER AS "groupNumber", a.GROUP_NAME AS "groupName", a.GROUP_AMOUNT as "gro…