农业网站开发的实验报告,京东网站的建设与发展前景,houzz室内设计,服务器架构做网站Mybatis目录
注解开发的crud 1.IUserDao接口中使用注解 2.测试类 注解开发的多表查询 多对一#xff08;一对一#xff09; 1.IAccountDao接口中使用注解 2.Account类中#xff08;从表类#xff09; 3.测试类 一对多#xff08;多对多#xff09; 1.IUserDao接口中使用…Mybatis目录
注解开发的crud 1.IUserDao接口中使用注解 2.测试类 注解开发的多表查询 多对一一对一 1.IAccountDao接口中使用注解 2.Account类中从表类 3.测试类 一对多多对多 1.IUserDao接口中使用注解 2.User类中从表类 注解开启二级缓存
注解开发的crud
1.IUserDao接口中使用注解
public interface IUserDao {/*** 查询所有用户* return*/Select(select * from user)ListUser findAll();/*** 保存用户* param user*/Insert(insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday}))void saveUser(User user);/*** 更新用户* param user*/Update(update user set username#{username},sex#{sex},birthday#{birthday},address#{address} where id#{id})void updateUser(User user);/*** 删除用户* param userId*/Delete(delete from user where id#{id} )void deleteUser(Integer userId);/*** 根据id查询用户* param userId* return*/Select(select * from user where id#{id} )User findById(Integer userId);/*** 根据用户名称模糊查询* param username* return*/
// Select(select * from user where username like #{username} )Select(select * from user where username like %${value}% )ListUser findUserByName(String username);/*** 查询总用户数量* return*/Select(select count(*) from user )int findTotalUser();
}2.测试类
public class AnnotationCRUDTest {private InputStream in;private SqlSessionFactory factory;private SqlSession session;private IUserDao userDao;Beforepublic void init()throws Exception{in Resources.getResourceAsStream(SqlMapConfig.xml);factory new SqlSessionFactoryBuilder().build(in);session factory.openSession();userDao session.getMapper(IUserDao.class);}Afterpublic void destroy()throws Exception{session.commit();session.close();in.close();}Testpublic void testSave(){User user new User();user.setUsername(mybatis annotation);user.setAddress(北京市昌平区);userDao.saveUser(user);}Testpublic void testUpdate(){User user new User();user.setId(57);user.setUsername(mybatis annotation update);user.setAddress(北京市海淀区);user.setSex(男);user.setBirthday(new Date());userDao.updateUser(user);}Testpublic void testDelete(){userDao.deleteUser(51);}Testpublic void testFindOne(){User user userDao.findById(57);System.out.println(user);}Testpublic void testFindByName(){
// ListUser users userDao.findUserByName(%mybatis%);ListUser users userDao.findUserByName(mybatis);for(User user : users){System.out.println(user);}}Testpublic void testFindTotal(){int total userDao.findTotalUser();System.out.println(total);}
}注解开发的多表查询
可以这么记忆 你所需要对应的表是很多个注解用many 对应一个的话就用one
demo功能阐述 查询用户账户的时候 返回用户的信息 因为多个账户或者一个账户才对应一个用户
多对一Mybatis中 一对一
1.IAccountDao接口中使用注解
public interface IAccountDao {/*** 查询所有账户并且获取每个账户所属的用户信息* return*/Select(select * from account)Results(idaccountMap,value {Result(idtrue,column id,property id),Result(column uid,property uid),Result(column money,property money),//这个注解是引入主表 FetchType(加载时机) EAGER(立即加载)Result(property user,column uid,oneOne(selectcom.itheima.dao.IUserDao.findById,fetchType FetchType.EAGER))})ListAccount findAll();/*** 根据用户id查询账户信息* param userId* return*/Select(select * from account where uid #{userId})ListAccount findAccountByUid(Integer userId);
}2.Account类中从表类
//多对一mybatis中称之为一对一的映射一个账户只能属于一个用户private User user;public User getUser() {return user;}public void setUser(User user) {this.user user;}3.测试类
public class AccountTest {private InputStream in;private SqlSessionFactory factory;private SqlSession session;private IAccountDao accountDao;Beforepublic void init()throws Exception{in Resources.getResourceAsStream(SqlMapConfig.xml);factory new SqlSessionFactoryBuilder().build(in);session factory.openSession();accountDao session.getMapper(IAccountDao.class);}Afterpublic void destroy()throws Exception{session.commit();session.close();in.close();}Testpublic void testFindAll(){ListAccount accounts accountDao.findAll();for(Account account : accounts){System.out.println(----每个账户的信息-----);System.out.println(account);System.out.println(account.getUser());}}
}一对多多对多
查询用户信息的时候 返回用户的账户信息 因为一个用户对应多个用户的账户信息
使用的是延迟加载
1.IUserDao接口中使用注解
public interface IUserDao {/*** 查询所有用户* return*/Select(select * from user)Results(iduserMap,value{Result(idtrue,column id,property userId),Result(column username,property userName),Result(column address,property userAddress),Result(column sex,property userSex),Result(column birthday,property userBirthday),Result(property accounts,column id,many Many(select com.itheima.dao.IAccountDao.findAccountByUid,fetchType FetchType.LAZY))})ListUser findAll();/*** 根据id查询用户* param userId* return*/Select(select * from user where id#{id} )ResultMap(userMap)User findById(Integer userId);/*** 根据用户名称模糊查询* param username* return*/Select(select * from user where username like #{username} )ResultMap(userMap)ListUser findUserByName(String username);
}2.User类中从表类
//一对多关系映射一个用户对应多个账户private ListAccount accounts;public ListAccount getAccounts() {return accounts;}public void setAccounts(ListAccount accounts) {this.accounts accounts;}注解开启二级缓存
哪个Dao接口需要就写在哪儿
CacheNamespace(blocking true) 位于到的顶部