mybatisProxy
config.xml
<?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> <!-- 次属性可以指定类的全路径,同时给他一个别名 相当于(id="'class="")
<typeAliases >
<typeAlias type="com.mybatis.entry.userMapper" alias="umapper"/>
</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/mybatis" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments> <mappers>
<!-- 注册userMapper.xml文件,
userMapper.xml位于me.gacl.mapping这个包下,
所以resource写成me/gacl/mapping/userMapper.xml
-->
<mapper resource="com/mybatis/dao/userMapper.xml"/>
</mappers>
</configuration>
UserMapper.xml
<?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"> <!-- namespace命名空间,作用就是对sql进行分类化的管理,理解为sql隔离
注意:使用mapper代理开发时,namespace有特殊作用
--> <!-- <mapper namespace = "umapper"> -->
<mapper namespace = "com.mybatis.dao.UserMapper">
<!-- 通过SELECT执行数据库查询
id:标识映射文件中的sql,称为statement的id;
将sql语句封装在mapperStatement的对象中,所以Id称为Statement的id;
parameterType:指定输入参数的类型,这里指定int型
#{}:表示一个占位符;
#{id}:其中Id表示接收输入的参数,参数名称就是Id,如果输入参数是简单类型,#{}中的参数名可以任意,可以是value或者其它名称;
resultType:指定sql输出结果所映射的java对象类型,select指定resultType表示将单条记录映射成java对象。
--> <select id = "selectById" parameterType="int" resultType="com.mybatis.entry.User">
select * from user where id=#{id}
</select>
<!-- 根据用户名称模糊查询用户信息,可能返回多条数据
resultType:指定的就是单条记录所映射的java类型;
${}:表示拼接sql字符串,将接收到的参数内容不加任何修饰拼接在sql中.
使用${}拼接sql,可能会引起sql注入
${value}:接收输入参数的内容,如果传入的是简单类型,${}中只能使用value
--> <select id="selectUserAndYear" resultType="com.mybatis.entry.UserMore">
select `user`.*,phone.*
from user,phone
where phone.phonenum = `user`.phoneNum and name=#{name};
</select> <!-- 数据库字段与类属性名不一致时 -->
<select id="selectUserAndYearMap" resultMap="UserMap" >
select `user`.*,phone.*
from user,phone
where phone.phonenum = `user`.phoneNum and name=#{name};
</select>
<!-- 一对一的resultMap关联方式 -->
<resultMap type="com.mybatis.entry.User" id="UserMap">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="phoneNum" property="phoneNum"/> <association property="phone" javaType="com.mybatis.entry.Phone">
<id column="id" property="id"/>
<result column="phoneNum" property="phoneNum"/>
<result column="year" property="year"/>
</association>
</resultMap> <select id="selectUserAndQQMap" resultMap="QQMap">
select `user`.*,qq.*
from user,qq
where `user`.id = qq.userId and user.name=#{name};
</select>
<!-- 一对多的resultMap关联方式 -->
<resultMap type="com.mybatis.entry.User" id="QQMap">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="phoneNum" property="phoneNum"/> <collection property="qqs" ofType="com.mybatis.entry.QQ">
<id column="qq_id" property="id"/>
<result column="qqName" property="qqName"/>
<result column="password" property="password"/>
<result column="userId" property="userId"/>
</collection>
</resultMap>
</mapper>
UserMapper.java
package com.mybatis.dao; import java.util.List; import com.mybatis.entry.User;
import com.mybatis.entry.UserMore; public interface UserMapper { public User selectById(int id)throws Exception; public UserMore selectUserAndYear(String name)throws Exception; public List<User> selectUserAndYearMap(String name)throws Exception; public List<User> selectUserAndQQMap(String name)throws Exception; }
UserService.java
package com.mybatis.service; import java.io.IOException;
import java.io.InputStream;
import java.util.List; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.mybatis.dao.UserMapper;
import com.mybatis.entry.User;
import com.mybatis.entry.UserMore; public class UserService { SqlSessionFactory factory; public void before() throws IOException{
InputStream in = Resources.getResourceAsStream("conf.xml");
factory = new SqlSessionFactoryBuilder().build(in);
} public User selectById(int id) throws Exception{
//先获取一个session工厂
before();
//生产出一个session
SqlSession session = factory.openSession();
//获取user session对象(代理人)
UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.selectById(id);
return user;
} public UserMore selectUserAndYear(String name) throws Exception{
before();
SqlSession session = factory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
UserMore more = mapper.selectUserAndYear(name);
return more;
} public List<User> selectUserAndYearMap(String name) throws Exception{
before();
SqlSession session = factory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> list = mapper.selectUserAndYearMap(name);
return list;
} public List<User> selectUserAndQQMap(String name) throws Exception{
before();
SqlSession session = factory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> list = mapper.selectUserAndQQMap(name);
return list;
}
}
User.java
package com.mybatis.entry;
import java.util.List;
public class User {
private Integer id;
private String name;
private String phoneNum;
private Phone phone;
private List<QQ> qqs;
public User() {
super();
}
public User(String name, String phoneNum) {
this.name = name;
this.phoneNum = phoneNum;
}
public User(Integer id, String name, String phoneNum) {
super();
this.id = id;
this.name = name;
this.phoneNum = phoneNum;
}
public List<QQ> getQqs() {
return qqs;
}
public void setQqs(List<QQ> qqs) {
this.qqs = qqs;
}
public Phone getPhone() {
return phone;
}
public void setPhone(Phone phone) {
this.phone = phone;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", phoneNum=" + phoneNum + ", phone=" + phone + ", qqs=" + qqs
+ "]";
}
}
QQ.java
package com.mybatis.entry;
public class QQ {
private Integer id;
private String qqName;
private String password;
private Integer userId;
public QQ() {
super();
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getQqName() {
return qqName;
}
public void setQqName(String qqName) {
this.qqName = qqName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
@Override
public String toString() {
return "QQ [id=" + id + ", qqName=" + qqName + ", password=" + password + ", userId=" + userId + "]";
}
}
Phone.java
package com.mybatis.entry;
public class Phone {
private Integer id;
private String phoneNum;
private Integer year;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
public Integer getYear() {
return year;
}
public void setYear(Integer year) {
this.year = year;
}
@Override
public String toString() {
return "Phone [id=" + id + ", phoneNum=" + phoneNum + ", year=" + year + "]";
}
}
UserMore.java
package com.mybatis.entry;
public class UserMore extends User{
private Integer year;
public UserMore() {
super();
}
public Integer getYear() {
return year;
}
public void setYear(Integer year) {
this.year = year;
}
@Override
public String toString() {
return "UserMore [year=" + year + "]";
}
}
Test.java
package com.mybatis.test; import java.util.List; import com.mybatis.entry.QQ;
import com.mybatis.entry.User;
import com.mybatis.entry.UserMore;
import com.mybatis.service.UserService; public class Test { @org.junit.Test
public void testSelectById() throws Exception{
UserService service = new UserService();
User user= service.selectById(1);
System.out.println(user);
} @org.junit.Test
public void testUserAndYear() throws Exception{
UserService service = new UserService();
UserMore more= service.selectUserAndYear("刘杨");
System.out.println("id:"+more.getId()+" name:"+more.getName()+
" phoneNum:"+more.getPhoneNum()+" year:"+more.getYear());
} @org.junit.Test
public void testUserAndYearMap() throws Exception{
UserService service = new UserService();
List<User> list = service.selectUserAndYearMap("刘杨");
for(User u:list){
System.out.println(u.getId()+" "+u.getName()+" "+u.getPhoneNum()+" "+u.getPhone().getYear());
System.out.println(u);
}
} @org.junit.Test
public void testUserAndQQMap() throws Exception{
UserService service = new UserService();
List<User> list = service.selectUserAndQQMap("刘杨");
for(User u:list){
System.out.print(u.getName()+ "=: ");
System.out.println(u);
for(QQ qq:u.getQqs()){
System.out.println(qq);
}
}
} }
mybatisProxy的更多相关文章
- Mybatis 和 Solon 勾搭在一起,也是个漂亮组合
故事相关的源码 https://gitee.com/noear/solon_demo/tree/master/demo08.solon_mybatis 故事开讲 Solon 是Java世界里一个新的极 ...
随机推荐
- 2018牛客网暑期ACM多校训练营(第十场)J Rikka with Nickname(二分,字符串)
链接:https://ac.nowcoder.com/acm/contest/148/J?&headNav=acm 来源:牛客网 Rikka with Nickname 时间限制:C/C++ ...
- Codeforces 919 行+列前缀和 树上记忆化搜索(树形DP)
A B C #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) ...
- Codeforces 902 树同型构造 多项式长除法构造(辗转相除法)
A #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #def ...
- 深入理解JVM线程模型
1. jvm内存模型在描述jvm线程模型之前,我们先深入的理解下,jvm内存模型.在jvm1.8之前,jvm的逻辑结构和物理结构是对应的.即Jvm在初始化的时候,会为堆(heap),栈(stack), ...
- Linux 软件的下载安装
一.Linux系统安装软件的方式有两种: 1.通过 Linux 资源服务(类似于APP Shop)直接安装 2.下载tar包,解压安装. 二.Linux 资源服务安装软件 1.提示:一般安装一个软 ...
- C语言中time函数和localtime获取系统时间和日期
可以通过time()函数来获得计算机系统当前的日历时间(Calendar Time),处理日期时间的函数都是以本函数的返回值为基础进行运算. 1. time 函数 返回1970-1-1, 00:00: ...
- 【SpringBoot】spring-session-data-redis 解决集群环境下session共享
为什么会产生Session共享问题 集群情况下,session保存在各自的服务器的tomcat中,当分发地址至不同服务时,导致sesson取不到,就会产生session共享问题. 解决方案 负载均 ...
- Spring对单例的底层实现,单例注册表
Spring框架对单例的支持是采用单例注册表的方式进行实现的,源码如下: public abstract class AbstractBeanFactory implements Configurab ...
- 34 String、StringBuffer、StringBuilder
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间. StringBuffer是可变类,和线程安全的字符串操作类,任何对 ...
- kong CentOS7网关安装
1.先安装postgres数据库,yum安装.yum install postgresql96yum install postgresql96-server配置环境变量export PGDATA=/v ...