copy http://blog.csdn.net/caodegao/article/details/6735049
企业级项目实战(带源码)地址:http://zz563143188.iteye.com/blog/1825168
MyBatis现在还挺少人用的,刚玩的时候在网站查资料都没有很多贴研究它.走了很多弯路;
在此做了一个小例子,跟大家分享一下;
如果能对一些刚玩MyBatis的朋友一些帮助就再好不过了.
首先给大家配置MyBatis的前奏,毕竟什么框架都是配置出来的,大家得下载MyBatis的文档,上面有很详细的配置前奏.
我就不给大家贴出来了.我是用Spring和Struts2集成的.别怪我太自私啊!下次慢慢在贴出集成的例子,
先给大家sql的配置吧
我有一个总文件mybatis-config.xml,在总文件加载子文件,这样至少分工还算明细些.
[html] view plaincopy
<?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="Account" type="com.cookiejoo.beans.Account" />
<typeAlias alias="Weibo" type="com.cookiejoo.beans.Weibo" />
</typeAliases>
<mappers>
<mapper resource="mybatisConfig/account-mapper.xml" />
<mapper resource="mybatisConfig/weibo-mapper.xml" />
</mappers>
</configuration>
重点在这个weibo-mapper.xml里面,这个也一样自己写他的sql映射account-mapper.xml
由于就演示一个表weibo关联表account,关联都在weibo-mapper.xml里面写.account-mapper.xml就不给大家了,没什么大碍的.
配置文件的详细我都写了,大家靠自己的悟性吧.
[html] view plaincopy
<?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">
<!-- 命名空间都以pojo类的包命名,很长,但是也好区分,文档上说这是MyBatis现在的规定了 -->
<mapper namespace="com.cookiejoo.beans.Weibo">
<!-- 定义一张表,并且来个关联表 -->
<resultMap type="Weibo" id="weiboJoinAccountResultMap">
<id property="wId" column="w_id" />
<result property="wContext" column="w_context" />
<result property="wCreateTime" column="w_create_time" />
<!-- 关联account表 -->
<association property="account" column="w_acc_id"
javaType="Account" resultMap="joinAccountResult" />
</resultMap>
<!-- 关联表需要的列 -->
<resultMap type="Account" id="joinAccountResult">
<id property="aId" column="a_id" />
<result property="aUsername" column="a_username" />
<result property="aHeadImage" column="a_head_image" />
</resultMap>
<!-- 定义没有关联的单表查询返回结果 -->
<resultMap type="Weibo" id="weiboResultMap">
<id property="wId" column="w_id" />
<result property="wContext" column="w_context" />
<result property="wCreateTime" column="w_create_time" />
<!-- 关联account表 -->
<association property="account" column="w_acc_id"
javaType="Account" resultMap="joinAccountResult" />
</resultMap>
<!-- 根据创建时间查询 -->
<select id="findWeiboJoinAccount"
resultMap="weiboJoinAccountResultMap" parameterType="Weibo">
select w.w_id,w.w_context,w.w_create_time, a.a_id as
w_acc_id,a.a_username,a.a_head_image from weibo w left outer
join account a on w.w_acc_id = a.a_id where w.w_create_time >
#{wCreateTime} order by w.w_create_time desc
</select>
<!-- resultMap 返回 上面的结果 -->
<select id="findAllWeibo" resultMap="weiboResultMap">
select w.w_id,w.w_context,w.w_create_time, a.a_id
from weibo w left join account a on w.w_acc_id = a.a_id
</select>
<!-- 查询一条记录 -->
<!-- 注意:此处的关联,看pojo类是怎么写的,如果查询出现什么错误,得看这里了 -->
<select id="findAllWeiboById" parameterType="int"
resultMap="weiboResultMap">
select w.w_id,w.w_context,w.w_create_time, w.w_acc_id
from weibo w
where w.w_id = #{wId}
</select>
<!--
首先,如果你的数据库支持自动生成主键的字段(比如MySQL和SQL Server),
那么你可以设置useGeneratedKeys=”true”,
而且设置keyProperty到你已经做好的目标属性上。
例如,如果上面的Author表已经对id使用了自动生成的列类型,那么语句可以修改为
-->
<insert id="addWeibo" parameterType="Weibo" useGeneratedKeys="true"
keyProperty="wId">
insert into weibo(w_acc_id,w_context,w_create_time)
values(#{account.aId},#{wContext},#{wCreateTime})
</insert>
<!-- 修改 -->
<update id="updateWeibo" parameterType="Weibo">
update weibo set w_acc_id = #{account.aId},w_context = #{wContext},w_create_time = #{wCreateTime}
where w_id = #{wId}
</update>
<!-- 删除 -->
<delete id="deleteWeibo" parameterType="int">
delete from weibo where w_id = #{wId}
</delete>
</mapper>
pojo类:这里你要注意了, 怎么给数据做搜集,
[java] view plaincopy
package com.cookiejoo.beans;
import java.util.Date;
public class Weibo {
private Integer wId;
private Account account;
private String wContext;
private Date wCreateTime;
public Weibo() {
}
public Integer getWId() {
return wId;
}
public void setWId(Integer wId) {
this.wId = wId;
}
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
public String getWContext() {
return wContext;
}
public void setWContext(String context) {
wContext = context;
}
public Date getWCreateTime() {
return wCreateTime;
}
public void setWCreateTime(Date createTime) {
wCreateTime = createTime;
}
}
两张表结构很简单
id都是自动增长的;
Table weibo
===========
w_id, w_acc_id, w_context, w_create_time
-----------
w_id int(11) PK
w_acc_id int(11)
w_context varchar(2000)
w_create_time datetime
Table account
=============
a_id, a_username, a_password, a_sex, a_phone, a_brithday, a_create_time, a_head_image
-------------
a_id int(11) PK
a_username varchar(45)
a_password varchar(45)
a_sex int(2)
a_phone varchar(15)
a_brithday datetime
a_create_time datetime
a_head_image varchar(45)
这个是java调用的例子,一个接口一个实现类,我用了Spring集成了,所以和单独的MyBatis例子有点出入,大家对着MyBatis文档做时就是获取getSqlSession这个不一样而已.
[java] view plaincopy
package com.cookiejoo.iservice.impl;
import java.util.Date;
import java.util.List;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import com.cookiejoo.beans.Weibo;
import com.cookiejoo.iservice.IWeiboService;
public class WeiboServiceImpl extends SqlSessionDaoSupport implements
IWeiboService {
@SuppressWarnings("unchecked")
public List<Weibo> findWeiboJoinAccount(Weibo w) {
return getSqlSession().selectList(
"com.cookiejoo.beans.Weibo.findWeiboJoinAccount", w);
}
@SuppressWarnings("unchecked")
public List<Weibo> findAllWeibo() {
return getSqlSession().selectList(
"com.cookiejoo.beans.Weibo.findAllWeibo");
}
public void addWeibo(Weibo w) {
w.setWCreateTime(new Date());
getSqlSession().insert("com.cookiejoo.beans.Weibo.addWeibo", w);
}
public void updateWeibo(Weibo w) {
getSqlSession().update("com.cookiejoo.beans.Weibo.updateWeibo", w);
}
public void deleteWeibo(Weibo w) {
getSqlSession().delete("com.cookiejoo.beans.Weibo.deleteWeibo", w);
}
public Weibo findAllWeiboById(Integer wId) {
return (Weibo) getSqlSession().selectOne(
"com.cookiejoo.beans.Weibo.findAllWeiboById", wId);
}
}
接着页面展示,我用jsp写的,用struts2做跳转... myJsp.jsp
[html] view plaincopy
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Condition by Free CSS Templates</title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<style type='text/css'>
#mytable {
padding: 0;
margin: 0;
}
th {
color: #4f6b72;
border-left: 1px solid #C1DAD7;
border-right: 1px solid #C1DAD7;
border-bottom: 1px solid #C1DAD7;
border-top: 1px solid #C1DAD7;
letter-spacing: 2px;
text-transform: uppercase;
text-align: left;
padding: 6px 6px 6px 12px;
background: #CAE8EA no-repeat;
}
td {
border-left: 1px solid #C1DAD7;
border-right: 1px solid #C1DAD7;
border-bottom: 1px solid #C1DAD7;
background: #fff;
padding: 6px 6px 6px 12px;
color: #4f6b72;
}
</style>
</head>
<body>
-------------------------------------------------------------------------------------------
<form action="findAllWeibo.action"><input value="findAllWeibo" type="submit"/>
<input name="weibo.wCreateTime" type="text" value="2011-01-01"/>
</form>
-------------------------------------------------------------------------------------------
<form action="addWeibo.action">
<input name="weibo.wContext" type="text" value="2011-01-01"/><br>
<input name="weibo.account.aId" type="text" value="1"/><br>
<input name="weibo.wCreateTime" type="text" value="2011-01-01"/>
<input value="addWeibo" type="submit"/>
</form>
-------------------------------------------------------------------------------------------
<form action="updateWeibo.action">
<input name="weibo.wContext" type="text" value="2011-02-01"/><br>
<input name="weibo.account.aId" type="text" value="2"/><br>
<input name="weibo.wCreateTime" type="text" value="2011-02-01"/>
<input name="weibo.wId" type="text" value="54"/>
<input value="updateWeibo" type="submit"/>
</form>
<a href="findWeiboByBean.action">findWeiboByBean</a>
<h3></h3>
<br>
<table id='mytable' cellspacing='0' width='100%'>
<tr>
<th>id</th><th>context</th><th>createTime</th><th>aid</th><th>operator</th></tr>
<c:forEach items="${weibos}" var="weibo">
<tr><td>${weibo.WId }</td><td>${weibo.WContext }</td><td>${weibo.WCreateTime }</td><td>${weibo.account.AId }</td><td><a href="deleteWeibo.action?weibo.wId=${weibo.WId }">delete</a></td></tr>
</c:forEach>
</table>
</body>
</html>
相关推荐
在本示例中,"mybatis递归查询菜单树"是一个基于SpringBoot架构的应用,它演示了如何利用MyBatis进行递归查询来构建菜单树结构。此外,这个项目还集成了JTA(Java Transaction API)以支持分布式事务处理,并使用了...
Mybatis Generator是一个强大的工具,它能够自动生成Mybatis的映射文件、Java模型类和DAO接口,极大地简化了开发过程,降低了手动编写这些重复代码的工作量。本篇将深入探讨Mybatis Generator的使用方法和核心知识点...
在这个小例子中,我们将探索MyBatis的基本用法和核心概念。 首先,MyBatis的核心是XML配置文件,其中包含了数据库连接信息、映射文件以及SQL语句。映射文件定义了SQL查询与Java对象之间的关系,使得数据可以从...
通过学习和理解这些示例,开发者可以更好地掌握 MyBatis 在处理关联查询时的灵活性和实用性。对于复杂的企业级应用,掌握 MyBatis 的关联查询技巧是非常重要的,它能帮助我们编写出更加高效且易于维护的代码。
Mybatis框架(子查询)
在"Spring+MyBatis 整合中文教程+例子"中,我们可以深入学习如何将这两个强大的框架结合在一起,构建出高效、灵活的企业级应用程序。整合过程涉及以下几个关键知识点: 1. **环境搭建**:首先,你需要安装JDK,配置...
在本文中,我们将深入探讨如何手写MyBatis实现查询所有操作,以加深对其工作原理的理解。 首先,我们需要理解MyBatis的核心组件。MyBatis包含SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession和Mapper接口...
Mybatis实现多表联合查询和批量插入 Mybatis是一款流行的持久层框架,它可以帮助开发者快速、高效地访问数据库。在实际开发中,经常需要对多个表进行联合查询,或者对大量数据进行批量插入。本文将详细介绍如何使用...
springboot+mybatis 最简单的小例子 , 数据库用的是oracle自带的scott数据库 , 导进来就能用 , 绝对原创 测试地址示例 : http://localhost:8080/emp/list 测试数据库 : oracle 数据库默认的 scott/tiger
通过mybatis的拦截器,实现为所有sql(或指定sql) 统一添加查询条件,譬如通过线程变量传递某参数(日期),来实现对指定参数的数据筛选,而不需要在每个查询前,手动将该条件注入到查询中。因该资料网络较少,故特此...
【标题】"springboot,mybatis,mybatis-generator,例子" 涉及到的核心技术是Spring Boot、MyBatis以及MyBatis Generator。这三者都是Java开发中常用的重要框架,它们各自承担着不同的职责,共同构建了一个高效、便捷...
【标题】"mybatis例子" 是一个基于SpringMVC框架集成MyBatis的简单示例项目,它展示了如何在实际开发中将这两个流行的Java技术相结合,以实现灵活的数据访问和控制层逻辑。在这个例子中,MySQL数据库被用作后端数据...
在这个主题中,我们将深入探讨如何利用MyBatis拦截器实现分页以及动态地修改SQL语句和参数值。 首先,我们关注的是"PaginationInterceptor.java",这是一个常见的分页拦截器实现。在MyBatis中,我们可以创建自定义...
4. 微信小例子:这里的微信小例子可能是指使用MyBatis和SpringMVC框架,结合微信的开放API,实现的一些功能,如微信登录、支付、消息推送等。微信提供了丰富的API,如OAuth2.0授权登录、JSAPI支付、小程序开发等,...
这个例子展示了如何通过Spring的依赖注入和MyBatis的动态SQL来实现高效的分页功能。在实际项目中,可以进一步优化,例如使用PageHelper等第三方分页插件,或者实现自定义的分页拦截器,以提供更强大的分页功能和更好...
在本例子中,我们使用的是`mybatis-generator-core-1.3.2-sources.jar`,这是一个特定版本的MBG的源代码包,方便开发者查看和理解其内部工作原理。 `mybatorGeneratorConfig.xml`是MBG的核心配置文件,它定义了如何...
在实际开发中,我们经常需要进行分布查询,也就是多个表之间的联合查询,MyBatis提供了丰富的功能来处理这种情况。本篇文章将深入探讨MyBatis中的分布查询、`resultType`与`resultMap`的用法,并分享新手学习MyBatis...
Mybatis允许开发者直接编写SQL,提高了查询效率和灵活性,同时通过XML或注解方式配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 SSM整合的过程主要包括...
MyBatis和Spring的整合是Java开发...通过学习这个例子,初学者可以深入理解MyBatis和Spring如何协同工作,进一步提升自己的Java开发技能。在实际项目中,这种整合方式能够帮助开发者更高效地构建健壮的、可维护的系统。