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世界里一个新的极 ...
随机推荐
- lvs工作方式和调度算法
LVS工作原理可以简单理解为: Lvs工作在内核空间,本身工作在input链上,与iptable不能同时用. LVS: ipvsadm :管理集群服务的工具,用来写规则 Ipvs 工作在内核. 工作原 ...
- 如何修改Git已提交的日志
情况一:最后一次提交且未push 执行以下命令: git commit --amend git会打开$EDITOR编辑器,它会加载这次提交的日志,这样我们就可以在上面编辑,编辑后保存即完成此次的修改. ...
- Microsoft Azure Overview
Day1 Overview 1. Cloud - Internet scaling / Internet connects / Resource pool 2. Why the cloud? Rap ...
- git初始化命令行指引
Git 全局设置 git config --global user.name "陈耿聪" git config --global user.email "swain@di ...
- 如何使用hook(非注入dll)
#include <Windows.h> #include <iostream> using namespace std; HHOOK mouseHook; LRESULT _ ...
- 八、asynicio模块以及爬虫应用asynicio模块(高性能爬虫)
asynicio模块以及爬虫应用asynicio模块(高性能爬虫) 一.背景知识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,只用一个线程且采用串行的方式执行, ...
- python类库32[多进程通信Queue+Pipe+Value+Array]
多进程通信 queue和pipe的区别: pipe用来在两个进程间通信.queue用来在多个进程间实现通信. 此两种方法为所有系统多进程通信的基本方法,几乎所有的语言都支持此两种方法. 1)Queue ...
- Raspberry Pi3驱动Oled ssh1106屏
Raspberry Pi3可以直接使用GPIO接口驱动OLED屏 一.接线 根据网上随便找的图可以看到树莓派3的GPIO接口引脚顺序 PS:26pin的GPIO为前26针 根据OLED屏的引脚说明,如 ...
- IDEA 2018.1可用License服务(持续更新)
1. http://idea.congm.in 2.http://idea.toocruel.net
- java——HttpClient 代理模式发送Http Https
在setProxy()方法中设置代理IP后可以将url中的域名换成这个代理IP. http很简单,但是https这样会报错. 问题:如何使用代理发送https请求? 客户端发送https请求之前会先向 ...