这几天一直在看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); */
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com