3.28日学习记录

来源:互联网 发布:矩阵的迹和特征值 编辑:程序博客网 时间:2024/05/21 16:21

于2016年3.28日在朗沃培训java课程,今天共讲了以下三点内容:1.Mybatis框架一对多关系实例钥匙和锁相互查找 2.地位权限多对多查找 3.缓存 

1.  2种缓存 a.实物缓存:随着session开始而开始,随着session结束而结束。又叫一级缓存,默认开启,生命周期短暂b.应用缓存:一级失效后,将用到此缓存,又叫二级缓存,需手动开启。

2.使用缓存要求:低并发,小,不经常修改

3.如何确定1对多的关系:在多的一方设置主表的外键

4.ResultMap:在实体类属性命名!=数据库字段名时,ResultType:在实体类属性命名=数据库字段名时使用。

练习钥匙和锁操作步骤:

1.建立数据库

2.导需要的包,建立properties文件设置与数据库连接信息,建立xml文件设置配置信息

3.建立web项目,书写连接提供类,建立bean设置属性的get、set、toString、有参构造、无参构造方法,建立dao设置需要实现的方法 。建立test包书写test测试类。

代码实现:

//建立实体钥匙Bean

public class LockBean {
private Integer id;
private String lockName;

//站在锁的角度,那么钥匙就应该是多者,这里使用List来表示多者。
private List<KeyBean> keys;

//建立接口

public interface IKeyMapper {
/**
* 为某一个锁批量添加钥匙
* @param keys
* @return
*/
public int batchAddKeys(@Param("keys")List<KeyBean> keys)throws Exception;

/**
* 查询钥匙的同时,将锁也查询出来
* @param id
* @return
*/
public KeyBean queryKeyBeanWithLockBean(int id);

}


//在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">
<mapper namespace="com.lovo.my.dao.IKeyMapper">
<resultMap id="keyWithLockMap" type="keyBean">
<result property="id" column="id" javaType="java.lang.Integer"></result>
<result property="keyName" column="key_name" javaType="java.lang.String"></result>
<association property="lock" column="fk_lock_id" select="com.lovo.my.dao.ILockMapper.getLockBeanById" javaType="LockBean"/>
</resultMap>

<insert id="batchSaveKeys" parameterType="java.util.List">
insert into t_key(key_name,fk_lock_id) values
<foreach collection="keys" item="key" separator=",">
(#{key.keyName},#{key.lock.id})
</foreach>
</insert>

<select id="findKeyBeanByLockId" resultType="KeyBean">
select id as id,key_name as keyName from t_key where fk_lock_id = #{id}
</select>

<select id="queryKeyBeanWithLockBean" resultMap="keyWithLockMap">
select * from t_key where id = #{id}
</select>

</mapper>


//在test里测试

public class TestKeyMapper {
rivate SqlSession session;

@Test
public void testQueryKeyWithLockBean(){
IKeyMapper km = session.getMapper(IKeyMapper.class);
KeyBean key = km.queryKeyBeanWithLockBean(2);
System.out.println(key);
}

@Ignore
public void testBatchSaveKeys(){
IKeyMapper km = session.getMapper(IKeyMapper.class);
ILockMapper lm = session.getMapper(ILockMapper.class);

//先要查锁的信息
LockBean lock = lm.getLockBeanById(1);
//再去添加钥匙
List<KeyBean> keys = new ArrayList<KeyBean>();
for(int i = 1 ; i <= 5 ; i ++){
KeyBean key = new KeyBean("钥匙"+i,lock);
keys.add(key);
}

try {
int rows = km.batchSaveKeys(keys);
Assert.assertEquals(5, rows);
session.commit();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
session.rollback();
}



}


/**
* 定义测试之前的方法
*/
@Before
public void beforeTest(){
session = DBTools.getSession();
}

/**
* 定义测试之后的方法
*/
@After
public void afterTest(){
session.close();
}
}

//建立锁的实体Bean

private Integer id;
private String keyName;

//封装进入锁对象
private LockBean lock;


//建立接口

public interface ILockMapper {
/**
* 添加锁的信息
* @param lock 锁的信息
* @return 数据库影响的行数
* @throws Exception
*/
public int saveLock(@Param("lock")LockBean lock)throws Exception;
/**
* 根据ID查询锁的对象
* @param id 锁的ID
* @return 锁的对象
*/
public LockBean getLockBeanById(int id);
/**
* 根据ID查询锁,并一起查询出对应的钥匙
* @param id
* @return
*/
public LockBean queryLockBeanWithKeyBean(int id);

}


//在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">


<mapper namespace="com.lovo.my.dao.ILockMapper">

<resultMap id="lockMap" type="LockBean">
<result property="id" column="id" javaType="java.lang.Integer"></result>
<result property="lockName" column="lock_name" javaType="java.lang.String"></result>
</resultMap>
<resultMap id="lockWithKeyMap" type="LockBean">
<result property="id" column="id" javaType="java.lang.Integer"></result>
<result property="lockName" column="lock_name" javaType="java.lang.String"></result>
<collection property="keys" column="id" select="com.lovo.my.dao.IKeyMapper.findKeyBeanByLockId" javaType="java.util.List"></collection>
</resultMap>

<select id="getLockBeanById" resultMap="lockMap">
select * from t_lock where id = #{id}
</select>

<insert id="saveLock">
insert into t_lock(lock_name)values (#{lock.lockName})
</insert>

<select id="queryLockBeanWithKeyBean" resultMap="lockWithKeyMap">
select * from t_lock where id = #{id}
</select>

</mapper>


//在Test里测试

public class TestLockMapper {
private SqlSession session;


/**
* 定义测试之前的方法
*/
@Before
public void beforeTest() {
session = DBTools.getSession();
}

@Test
public void testQueryLockBeanWithKeyBean() {
ILockMapper lm = session.getMapper(ILockMapper.class);
LockBean lock = lm.queryLockBeanWithKeyBean(1);
System.out.println(lock);
}


/**
* 测试新增方法
*/
@Ignore
public void testSaveLock() {
ILockMapper lm = session.getMapper(ILockMapper.class);
// 创建新增对象
LockBean lock = new LockBean("锁1", null);
try {
int rows = lm.saveLock(lock);
Assert.assertEquals(1, rows);
session.commit();// 事务提交
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
session.rollback();
}
}


/**
* 定义测试之后的方法
*/
@After
public void afterTest() {
session.close();
}


}


时间有限,多对多和缓存没练过,不懂。只有接下来找时间继续练习。



0 0