day04-MyBatis的注解开发
单表的CRUD注解开发:
User实体类:
package com.zyb.pojo; import java.io.Serializable;
import java.util.Date; public class User implements Serializable {
private Integer id;
private String username;
private String sex;
private String address;
private Date birthday; public User() {
} @Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
", birthday=" + birthday +
'}';
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
UserDao:
package com.zyb.dao; import com.zyb.pojo.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update; import java.util.List; public interface UserDao {
@Select("select * from my_user")
List<User> selAllUsers(); @Insert("insert into my_user(username,address,sex,birthday) values(#{username},#{address},#{sex},#{birthday}) ")
void saveUser(User u); @Update("update my_user set username=#{username} where id=#{id}")
void updateUser(User user); @Delete("delete from my_user where id=#{id}")
void deleteUserById(int userId); @Select("select * from my_user where id=#{id}")
User selUserById(int userId); @Select("select * from my_user where username like '%${value}%'")
// @Select("select * from my_user where username like #{username}")
List<User> selUserByName(String userName); @Select("select count(*) from my_user")
int usersNum();
}
测试:
package com.zyb.test; import com.zyb.dao.UserDao;
import com.zyb.pojo.User;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test; import java.io.InputStream;
import java.util.Date;
import java.util.List; public class AnnotationCRUDTest {
private InputStream in;
private SqlSessionFactory factory;
private SqlSession session;
private UserDao userDao; @Before
public void init()throws Exception{
in = Resources.getResourceAsStream("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(in);
session = factory.openSession();
userDao = session.getMapper(UserDao.class);
} @After
public void destroy()throws Exception{
session.commit();
session.close();
in.close();
} @Test
public void testSelAllUsers(){
List<User> users=userDao.selAllUsers();
users.forEach(x-> System.out.println(x));
} @Test
public void testSaveUser(){
User user= new User();
user.setSex("男");
user.setAddress("地球");
user.setBirthday(new Date());
user.setUsername("zhang");
userDao.saveUser(user);
} @Test
public void testUpdateUser(){
User user = new User();
user.setId(58);
user.setUsername("liu");
user.setSex("女");
userDao.updateUser(user); } @Test
public void testDeleteUserById(){
userDao.deleteUserById(58);
} @Test
public void testSelUserById(){
User user= userDao.selUserById(52);
System.out.println(user);
} @Test
public void testSelUserByName(){
List<User> users=userDao.selUserByName("王");
users.forEach(x-> System.out.println(x));
} @Test
public void testUsersNum(){
int num=userDao.usersNum();
System.out.println(num);
} }
多表注解操作:
逻辑:一个用户可以有多个账户,一个账户只能被一个用户拥有
User实体类多了一个:

新增的Account实体类:
package com.zyb.pojo;
import java.io.Serializable;
public class Account implements Serializable {
private Integer id;
private Integer uid;
private Double money;
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String toString() {
return "Account{" +
"id=" + id +
", uid=" + uid +
", money=" + money +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
public Account() {
}
}
AccountDao:
package com.zyb.dao; import com.zyb.pojo.Account;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.mapping.FetchType; import java.util.List; public interface AccountDao { @Select("select * from my_account")
@Results(id="accountMap",value = {
@Result(property = "id",column = "id",id=true),
@Result(property = "uid",column = "uid"),
@Result(property = "money",column = "money"),
@Result(property = "user",column = "uid",one = @One(select = "com.zyb.dao.UserDao.selUserById",fetchType= FetchType.EAGER)) })
List<Account> selAllAccounts2User(); @Select("select * from my_account where uid=#{uid}")
@ResultMap("accountMap")
List<Account> selAccountsByUid();
}
UserDao:
package com.zyb.dao; import com.zyb.pojo.User;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.mapping.FetchType; import java.util.List; public interface UserDao {
@Select("select * from my_user")
@Results(id="userMap" ,value={
@Result(property = "userId",column="id" ,id=true),
@Result(property = "userName",column="username"),
@Result(property = "userAddress",column="address"),
@Result(property = "userSex",column="sex"),
@Result(property = "userBirthday",column="birthday"),
@Result(property = "accounts",column = "id",many = @Many(select = "com.zyb.dao.AccountDao.selAccountsByUid",fetchType = FetchType.LAZY)) })
List<User> selAllUsers(); @Select("select * from my_user where id=#{id}")
@ResultMap(value = {"userMap"})
User selUserById(int userId); @Select("select * from my_user where username like #{username}")
@ResultMap(value = {"userMap"})
List<User> selUserByName(String userName); }
Dao层分析:
Results点进去的源码:
id属性、Result类型的value数组

Result类型点进去的源码:

One或Many点进去的源码:

注意在使用注解是mybatis-config.xml的配置

day04-MyBatis的注解开发的更多相关文章
- spring boot整合mybatis基于注解开发以及动态sql的使用
让我们回忆一下上篇博客中mybatis是怎样发挥它的作用的,主要是三类文件,第一mapper接口,第二xml文件,第三全局配置文件(application.properties),而今天我们就是来简化 ...
- mybatis的注解开发之三种动态sql
脚本sql XML配置方式的动态SQL我就不讲了,有兴趣可以自己了解,下面是用<script>的方式把它照搬过来,用注解来实现.适用于xml配置转换到注解配置 @Select(" ...
- mybatis学习:mybatis的注解开发和编写dao实现类的方式入门
一.使用注解则不需要创建映射配置文件:即xxxDao.xml javaBean为什么要实现Serializable接口? Java的"对象序列化"能让你将一个实现了Serializ ...
- Mybatis使用注解开发(未完)
使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心 注解在接口实现 @Select("SELECT * FROM user") Lis ...
- MyBatis使用注解开发
- mybatis学习:mybatis的注解开发CRUD操作
Dao层: public interface IUserDao { /** * 查询所有结果 * @return */ @Select("select * from user") ...
- Mybatis注解开发模糊查询
Mybatis注解开发模糊查询 一般在使用mybatis时都是采用xml文件保存sql语句 这篇文章讲一下在使用mybatis的注解开发时,如何进行模糊查询 模糊查询语句写法(在@Select注解中) ...
- 学习MyBatis必知必会(7)~注解开发、动态SQL
一.MyBatis的注解开发 开发中推荐是使用xml文件配置 1.配置映射关系[使用注解的方式]: <!-- 全局的配置文件 --> <configuration> <! ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十六)——SpringMVC注解开发(高级篇)
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7085268.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十五)——S ...
- mybatis多参数传递,延迟加载,缓存,注解开发
1.Mybatis的多参数传递方式 需求:更具id 和 名字查询用户: select * from user where id = ? and name = ?: 1):QueryVo 或者 User ...
随机推荐
- Vue - 表单修饰符
.lazy 在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 . 使用 lazy 修饰符,从而转变为使用 change 事件进行同步 <div id=&qu ...
- Java学习笔记(九)面向对象---模板方法设计模式
理解 在定义功能时功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么就将不确定的部分暴露出去,由该类的子类完成. 举例 需求 获取一段程序的运行时间 代码 abstra ...
- kbhit函数说明
kbhit,用来检测键盘是否被敲击.所以就有了他的名字:keyboard hit 当键盘有按键被按下时,kbhit函数就会返回一个非0值. 当我们在写某个程序时,希望读入一些字符,但是又不能停在那里只 ...
- Centos7 下mysql 密码重置
Centos7 下mysql 密码重置 先停止mysql服务 mysqld_safe --skip-grant-tables & mysql mysql> use mysql;mysql ...
- Spring Security技术栈开发企业级认证与授权(一)环境搭建
本项目是基于慕课网的Spring Security技术栈开发企业级认证与授权,采用IDEA开发,本文章用来记录该项目的学习过程. 慕课网视频:https://coding.imooc.com/clas ...
- element-ui里el-form的lable颜色怎么修改?
就是把style改写成全局的,不要scoped(注意class,id的唯一,不要影响了整体布局) 链接:https://segmentfault.com/q/1010000017251094
- 树莓派4B踩坑指南 - (11)免费搭建网站(宝塔,花生壳)
目录 宝塔 安装宝塔面板 登录及初始化设置 安装网站 花生壳 安装花生壳 设置花生壳 测试 问题(未解决但不影响使用) 网站统计 树莓派这么低的功耗,不用来当服务器总感觉有点浪费...完成效果:htt ...
- 关于XShell&XFtp
今天在开发的时候要打包一个东东到测试服务器去,突然发现xftp用不了,然后各种下载破解.绿色版 结果都是一堆广告,原来这个xshell支持民用版,无需破解就能下载使用,这里小小的记录下 一. 前言 ...
- ClickOnce部署,修改deploymentProvider
打开 以.application 为后缀的文件,找到并修改 <deploymentProvider codebase="" /> 即可
- 安慰奶牛Cheering up the Cow
传送门 一次a就很开心 可以当作kruskal模板题(orz --------------------------------------------------------------------- ...