MyBatis学习三(多表操作、动态sql、连接池及事务控制)

1.连接池

连接池的连接按照顺序编号,当需要当需要使用时,从连接池中取出一个,

其他的连接按顺序从新编号;当使用的连接释放后,放回连接池,获得一个新的编号;


2.mybatis中的连接池

三种配置方式:

    

   unpooled中没有池的思想,每次用都获取一些给新的连接

PooledDataSource和UnPooledDataSource两个类,是连接池类型的实现类

(红色表示一个线程开始请求资源连接)连接池是一个ArrayList集合


3.mybatis中的事物

    

  

4.动态sql语句

<if>可用来对选择查询条件加以判断,<where>内标签可以嵌套<if>,从而避免了where 1=1的写法

例如:  

       

    <foreach>标签,进行范围查询

 

    item的值和标签内的值要保持一致

 

5.mybatis中的多表查询

     

建表语句
 CREATE TABLE t_account1(
  id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  uid INT(11) NOT NULL,
  money DOUBLE NOT NULL,
  FOREIGN KEY(uid) REFERENCES t_user(id)
)ENGINE=INNODB DEFAULT CHARSET=utf8

1)一对一

2)一对多

在User类中添加账户的属性集合List<Account> accounts;

sql语句:SELECT * FROM t_user u LEFT OUTER JOIN t_account a ON u.id = a.uid

表的做外连接,左表的数据将全部显示,同时显示出右表中含有信息的数据

配置接口类的xml文件:

          

 3)多对多的关系

 

角色实体类中:

 

从用户到角色:

user类中



6.JNDI

创建一个新的maven项目 webapp、 勾选架构、完善maven项目结构

部分sql语句:

CREATE TABLE t_account1(
  id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  uid INT(11) NOT NULL,
  money DOUBLE NOT NULL,
  FOREIGN KEY(uid) REFERENCES t_user(id)
)ENGINE=INNODB DEFAULT CHARSET=utf8

INSERT INTO t_account VALUES(NULL,21,500);

SELECT a.*,u.username ,u.sex,u.address FROM t_user u,t_account a WHERE u.id = a.uid;

SELECT u.*,a.id AS aid,a.uid,a.money FROM t_account a,t_user u WHERE u.id = a.uid;

SELECT * FROM t_user u LEFT OUTER JOIN t_account a ON u.id = a.uid

CREATE TABLE t_role(
 rid INT NOT NULL,
 rname VARCHAR(30) DEFAULT NULL COMMENT '角色名称',
 rdesc VARCHAR(60) DEFAULT NULL COMMENT '角色描述',
 PRIMARY KEY(rid)
)ENGINE=INNODB DEFAULT CHARSET=utf8

INSERT INTO t_role(rid,rname,rdesc) VALUES(1,'老师','授业解惑'),(2,'老师2','授业解惑2')

DROP TABLE IF EXISTS t_userrole

CREATE TABLE t_userrole(
 uidd INT(11) NOT NULL COMMENT '用户编号',
 ridd INT(11) NOT NULL COMMENT '角色编号',
 PRIMARY KEY(uidd,ridd),
 CONSTRAINT  FOREIGN KEY(ridd) REFERENCES t_role(rid),
 CONSTRAINT  FOREIGN KEY(uidd) REFERENCES t_user(id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO t_userrole(uidd,ridd) VALUES(7,1),(21,1),(7,2)

SELECT u.*,r.rid,r.rname,r.rdesc FROM t_role r
 LEFT OUTER JOIN t_userrole ur ON r.rid = ur.ridd
 LEFT OUTER JOIN t_user u ON u.id = ur.uidd
 
 
SELECT u.*,r.rid,r.rname,r.rdesc FROM t_user u
 LEFT OUTER JOIN t_userrole ur ON u.id = ur.uidd
 LEFT OUTER JOIN t_role r ON r.rid = ur.ridd

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值