这几天一直在看mybatis,觉得分为三个部分在应用中需要掌握:结果集动态加载,事务管理,缓存机制:
后面两个以后暂时只是懂一点,以后看源码再叙说吧。
结果集动态加载,按照我的理解是首先是resultmap之间相互合并或者引用,形成更大的结果集,然后是逻辑标签的使用,可以节省许多sql逻辑上的判断,最后是映射在javabean上,可以构造注入,建立对象属性,注入对象集合。以下是我这几天学习的一些概要。
1.select查询返回到javabean结果,其中属性resultType值是为返回集合的基本单元,打个比方,在DAO接口里,返回的是LIst<User>,那么在resultTyp=“User”,并不是写resultType="LIst",在设置植入参数parameterType时,一般接受HashMap,String,int,自定义的JAVBEAN,其实这几个一般情况下就足够可以用了,具体写的时候就类似于ognl表达式,比如 map(HashMap)中username="123"----------->#{username},就可以了,不用写map.username这样是错的。以上的一些注意的话,对表进行简单查询就可以了。:在官方文档里里面是这样写的,参考一下
<select id=”selectUsers” parameterType=”int” resultType=”hashmap”>
select id, username, hashedPassword
from some_table
where id = #{id}
</select>
2.结果集合并是通过resultMap实现,(其实resultType也是这种方式),以来满足进行多表查询,和减少javabean(因为只是相互注入,所以不需要重新写,重复利用):
association子标签的话,是用来一对一查询,打个比方A.a---------->B.b有两条结果,是只会返回后面那一条的,属性主要为4个,resultMap=""(调用其他的resultMap),property(调用的javabean集合对应的属性名),column(sql返回的结果集对应的名字),javaType(返回的到javabean结果集的类型,不是最基本类型)
collection子标签,就是解决多对多的问题,与association属性区别多了一个oftype(返回结果集的基本类型),比如你返回的是List<user>,就写ArrayList,对应到javabean
construtors,初始化构造,一般不用,Discriminator的作用相当于switch,就是对sql语句查出来的某列的一个值继续判断,再来执行resultmap,选择不同的外部结果集合,类似于choose标签,但是个人感觉Discriminator是针对内部sql中column逻辑判断,而choose是对外部变量来驱动执行的,这点我不是很清楚
3.逻辑标签语句:(因为有些比较简单,只写出我认为重要的),写的时候,可能发现会有多余的词出现,使得sql不合法,所以有了<trim>来处理,其过滤分为前缀prefix,和后缀suffix,用的时候要知道过滤的内容遗留位置,比如and 在合法字符串前面就是前缀。在prefixOverrides中,按照官方文档说明:
(overrides属性使用了管道分隔的文本列表来覆写,而且它的空白也不能忽略的。这样的结果
是移出了指定在overrides 属性里字符,而在开头插入prefix属性中指定的字符),但是在使用时跟其他标签一样,只是在prefixOverrides="and|or|shell"里面对过滤单元加上 | 这个符号,其他空格不要可以执行,;forech注意事项就是导入参数名的问题,如LIst----》list,set的话用于update语句,可以使用trim代替
因个人水平有限,且博客主要是记录个人学习的知识以及梳理,欢迎各位大神指出问题(下附简单配置代码)
UserinforMapper.xml(具体操作sql配置文件)
<?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="mybatis.test.Db_userinforDao"> <insert id="insert" parameterType="mybatis.test.Db_userinfor"> insert into db_userinfor values(#{username},#{userpass},#{userinterest},#{useraddress},#{userphone},#{usergrades}) </insert> <sql id="changeselect" >select * from db_userinfor <trim prefix="where" prefixOverrides="and|or|shell" > <choose> <when test="name!=null"> username=#{name} </when> </choose> and userpass=#{pass} </trim> </sql> <select id="selectall" resultType="mybatis.test.Db_userinfor" parameterType="HashMap" > <include refid="changeselect" /> </select> <select id="selectlist" resultType="HashMap"> select username,userpass from db_userinfor limit 1 </select> <select id="selectmap" resultMap="UserMap"> select username as usernames,userpass as userpasss from db_userinfor limit 1 </select> <resultMap type="mybatis.test.Db_userinfor" id="UserMap"> <id property="username" column="usernames" /> <result property="userpass" column="userpasss" /> </resultMap> <select id="selecttwo" resultMap="twomap" > select db_userinfor.username as username,db_userinfor.userpass as userpass,db_order.id as id,db_order.Ac_id as orderid,db_order.username as usernames from db_userinfor,db_order where db_userinfor.username=db_order.username </select> <resultMap type="mybatis.test.UnionQuery" id="twomap"> <id property="username" column="username" /> <result property="userpass" column="userpass" /> <!-- <collection property="order" ofType="mybatis.test.Db_order" resultMap="returnmap"> </collection> --> <association property="order" resultMap="returnmap" > </association> </resultMap> <resultMap type="mybatis.test.Db_order" id="returnmap"> <id property="id" column="id" /> <result property="Ac_id" column="orderid" /> <result property="username" column="usernames" /> </resultMap> <!-- 测试用例 --> <!-- <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true" /> --> </mapper> <!--<association property="order" column="username" javaType="mybatis.test.Db_order" resultMap="returnmap"></association> --> <!--<select id="selectone" resultMap="" parameterType="String"> select username,userpass from db_userinfor where username=#{usernames} limit 1 </select> --><!-- <collection property="order" ofType="mybatis.test.Db_order" column="username" resultMap="returnmap"> </collection> -->
myabtis主配置文件
<?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> <typeAliases> <typeAlias alias="UserDAO" type="sql.mybatis.dao.Db_userinforDAO" /> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/helper?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> <mappers> <mapper resource="mybatis/test/UserDaoMapper.xml" /> <mapper resource="sql/mybatis/dao/db_userinforDAOMapper.xml" /> </mappers> </configuration>
对象javabean
package mybatis.test; public class Db_userinfor { private String username; private String userpass; private String userinterest; private String useraddress; private String userphone; private String usergrades; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getUserpass() { return userpass; } public void setUserpass(String userpass) { this.userpass = userpass; } public String getUserinterest() { return userinterest; } public void setUserinterest(String userinterest) { this.userinterest = userinterest; } public String getUseraddress() { return useraddress; } public void setUseraddress(String useraddress) { this.useraddress = useraddress; } public String getUserphone() { return userphone; } public void setUserphone(String userphone) { this.userphone = userphone; } public String getUsergrades() { return usergrades; } public void setUsergrades(String usergrades) { this.usergrades = usergrades; } }
操作接口maperdao
package mybatis.test; import java.util.HashMap; import java.util.List; public interface Db_userinforDao{ public void insert(Db_userinfor userinfor); public List<Db_userinfor> selectall(HashMap map); // public List<Db_userinfor> selectall(HashMap map); public List<HashMap> selectlist(); public Db_userinfor selectmap(); public List<UnionQuery> selecttwo(); public void deleteobject(String username); } /* public int update(Db_userinfor userinfor); public int delete(String username); public List<Db_userinfor> selectAll(); public int countAll(); public Db_userinfor[] findByusername(String username); */
相关推荐
只需要在springboot的配置文件做简单的配置,mybatis拦截器将SQL中所有参数自动做了填充。拦截器监控慢SQL并将完整的可执行的SQL语句打印在日志文件中,复制该SQL语句即可在数据库工具中执行。 使用方法: 找到你...
主要介绍了spring boot配置MySQL数据库连接、Hikari连接池和Mybatis的简单配置方法,需要的朋友可以参考下
供了丰富的示例,通过自下而上的方法使读者更好地理解和掌握 MyBatis 的高级用法,同时针对 MyBatis 的代码生成器提供了详细的配置介绍。此外,本书还提供了缓存配置、插件开发、 Spring Spring Boot 成的详细内容...
MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...
一般使用mybatis的环境,大多都是别人已经配置好的。直接用就好了,如何自己搭建呢?其实很简单。看官方的文档就可以解决了。主要为了学习mybatis最基础的配置。我文章中的方法不基于spring,一般很少会在真实项目中...
演示了通过maven怎样配置mybatis,和mybatis的简单用法
针对MyBatis高级映射、存储过程和类型处理器提供了丰富的示例,通过自下而上的方法使读者更好地理解和掌握MyBatis的高级用法,同时针对MyBatis的代码生成器提供了详细的配置介绍。此外,本书还提供了缓存配置、插件...
这里简单贴一下MyBatis的介绍,具体使用方法会在代码中贴出。 MyBatis的前世今生 MyBatis的前身就是iBatis,iBatis本是由Clinton Begin开发,后来捐给Apache基金会,成立了iBatis开源项目。2010年5月该项目由Apahce...
Mybatis读写分离,支持n多的从库,简单的负载均衡。数据库是mysql,采用druid连接池。 读写分离采用插件的形式实现的,优点是不需要写源注解,不需要写分开的Mapper.xml。 如果只有主库的话,那么会创建两个地址相同...
MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects, 普通的 Java 对象)映射成数据库中的记录。 1. 核心API的生命周期 MyBatis 的核心 API 包括 SqlSession、...
MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects, 普通的 Java 对象)映射成数据库中的记录。 1. 核心API的生命周期 MyBatis 的核心 API 包括 SqlSession、...
针对 MyBatis 高级映射、存储过程和类型处理器提供了丰富的示例,通过自下而上的方法使读者更好地理解和掌握MyBatis 的高级用法,同时针对 MyBatis 的代码生成器提供了详细的配置介绍。此外,本书还提供了缓存配置、...
mybatis-plus练习项目包括Mapper的配置以及枚举配置等 简单项目,仅仅是用法
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 MyBatis是一款开源的持久化框架,用于简化Java应用程序与数据库之间...
开箱即用,无需任何配置,继承基类 Mapper 即可获得大量通用方法; 随心所欲,通过复制粘贴的方式可以组建自己的基类 Mapper; 全面贴心,提供 Service 层的封装方便业务使用和理解 Mapper; 简单直观,提供 ...
MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。 每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,...
MyBatis 可以使用简单的 XML 或注解来配置和原始类型、接口和 Java POJOs(Plain Old Java Objects) 为映射,包括集成的复杂类型。 MyBatis 的主要功能特性包括: SQL 映射: MyBatis 可以映射 SQL 语句到 Java 方法...
从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。但是也可以使用任意的输入流(InputStream)实例,包括字符串形式的文件路径或者 file:// 的 URL 形式的文件路径来配置。...
学习笔记——mybatis的起步(1) ... 第五个:映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名 当我们遵从了第三、四、五之后,我们在开发中就无需再写dao的实现了。 mybatis的入门案列
生成查询工具Assist(Assist为CMEU特别定制的查询工具,使用该工具一切操作都变得超简单,比如:分页通过Assist只需要设置2个参数就可以实现比如参数1=10,参数2=5,查询出来就是第10行到15行的数据,同时也可以防注入动态...