MyBatis注解开发方式
步骤:1.环境搭建
2.在接口内编写方法并配置注解信息
3.在测试类中测试
具体步骤如下:
1.项目样式总览
2.环境搭建
2.1新建一个Java项目,在新项目下新建一个模块,在模块下创建一个lib目录导入四个jar包,全部选中右键点击ADD as Library->ok 完成jar包加载
junit-4.10.jar (单元测试jar包)
log4j-1.2.17.jar (打印信息)
mybatis-3.5.0.jar (mybatis核心jar包)
mysql-connector-java-5.1.37-bin.jar (数据库驱动jar包)
2.2在src目录下导入以下三个配置文件
① jdbc.properties
② log4j.properties
③ mybatis-config.xml
其内容分别如下:
2.21 jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/数据库名
jdbc.username=用户名
jdbc.password=密码
2.22 log4j.properties
### 设置Logger输出级别和输出目的地 ###
log4j.rootLogger=debug, stdout
### 把日志信息输出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
2.23 mybatis-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>
<!-- 加载外部属性文件(.properties) -->
<properties resource="jdbc.properties"></properties>
<typeAliases>
<package name="com.itheima.entity"/>
</typeAliases>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--1.3配置连接池需要的参数-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.itheima.dao"/>
</mappers>
</configuration>
2.3创建四个包,分别命名为
dao: 存放接口
entity:存放实体类
test:存放测试类
utils:存放工具类
内容如下:
dao包内
2.31 UserMapper接口
//单表查询
public interface UserMapper {
// 1.根据用户id删除用户
@Delete("delete from user where id=#{uid};")
void deleteUser(int uid);
// 2.根据用户id修改用户
@Update("update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id};")
void updateUser(User user);
// 3.添加用户
@Insert("insert into user values(null,#{username},#{birthday},#{sex},#{address});")
@SelectKey(statement = "select LAST_INSERT_ID();",keyColumn = "id",keyProperty = "id",resultType = int.class,before = false)
void addUser(User user);
// 4.查询用户
@Select("select * from user where id=#{uid};")
User findUserById(int uid);
}
2.32 UserMapperMoreTable接口
//多表查询(一对多、多对多)
public interface UserMapperMoreTable {
// 通过id查询用户扩展信息
@Select("select * from user_info where id=#{uid};")
UserInfo findUserInfoById(int uid);
//通过id查询用户当前订单
@Select("select * from `order` where user_id=#{uid};")
List<Order> findOrders(int uid);
//编写方法:通过id查询1个用户
/*@Select("select * from user where id=#{uid};")
@Results({
@Result(column = "id",property = "id",id = true),
@Result(property = "userInfo",column = "id",one = @One(select = "findUserInfoById")),
@Result(property = "orders",column = "id",many = @Many(select = "findOrders"))
})*/
@Select("select * from user where id=#{uid};")
@Results(value = {
@Result(column = "id",property = "id"),
@Result(property = "userInfo",column = "id",one = @One(select = "finfUserById"))
})
User finUserById(int uid);
}
entity包内
2.33 Order类
public class Order {
private int oid;
private int userId;
private String number;
private Timestamp createTime;
private String note;
public Order() {
}
public Order(int oid, int userId, String number, Timestamp createTime, String note) {
this.oid = oid;
this.userId = userId;
this.number = number;
this.createTime = createTime;
this.note = note;
}
/**
* 获取
* @return oid
*/
public int getOid() {
return oid;
}
/**
* 设置
* @param oid
*/
public void setOid(int oid) {
this.oid = oid;
}
/**
* 获取
* @return userId
*/
public int getUserId() {
return userId;
}
/**
* 设置
* @param userId
*/
public void setUserId(int userId) {
this.userId = userId;
}
/**
* 获取
* @return number
*/
public String getNumber() {
return number;
}
/**
* 设置
* @param number
*/
public void setNumber(String number) {
this.number = number;
}
/**
* 获取
* @return createTime
*/
public Timestamp getCreateTime() {
return createTime;
}
/**
* 设置
* @param createTime
*/
public void setCreateTime(Timestamp createTime) {
this.createTime = createTime;
}
/**
* 获取
* @return note
*/
public String getNote() {
return note;
}
/**
* 设置
* @param note
*/
public void setNote(String note) {
this.note = note;
}
public String toString() {
return "Order{oid = " + oid + ", userId = " + userId + ", number = " + number + ", createTime = " + createTime + ", note = " + note + "}";
}
}
2.34 User类
public class User {
private int id;
private String username;
private Date birthday;
private String sex;
private String address;
//一个用户包含一个扩展信息(一对一)
private UserInfo userInfo;
//一个用户包含多规格订单(一对多)
private List<Order> orders;
public User() {
}
public User(int id, String username, Date birthday, String sex, String address) {
this.id = id;
this.username = username;
this.birthday = birthday;
this.sex = sex;
this.address = address;
}
public User(int id, String username, Date birthday, String sex, String address, UserInfo userInfo) {
this.id = id;
this.username = username;
this.birthday = birthday;
this.sex = sex;
this.address = address;
this.userInfo = userInfo;
}
public User(int id, String username, Date birthday, String sex, String address, UserInfo userInfo, List<Order> orders) {
this.id = id;
this.username = username;
this.birthday = birthday;
this.sex = sex;
this.address = address;
this.userInfo = userInfo;
this.orders = orders;
}
/**
* 获取
* @return id
*/
public int getId() {
return id;
}
/**
* 设置
* @param id
*/
public void setId(int id) {
this.id = id;
}
/**
* 获取
* @return username
*/
public String getUsername() {
return username;
}
/**
* 设置
* @param username
*/
public void setUsername(String username) {
this.username = username;
}
/**
* 获取
* @return birthday
*/
public Date getBirthday() {
return birthday;
}
/**
* 设置
* @param birthday
*/
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
/**
* 获取
* @return sex
*/
public String getSex() {
return sex;
}
/**
* 设置
* @param sex
*/
public void setSex(String sex) {
this.sex = sex;
}
/**
* 获取
* @return address
*/
public String getAddress() {
return address;
}
/**
* 设置
* @param address
*/
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
", userInfo=" + userInfo +
", orders=" + orders +
'}';
}
/**
* 获取
* @return userInfo
*/
public UserInfo getUserInfo() {
return userInfo;
}
/**
* 设置
* @param userInfo
*/
public void setUserInfo(UserInfo userInfo) {
this.userInfo = userInfo;
}
/**
* 获取
* @return orders
*/
public List<Order> getOrders() {
return orders;
}
/**
* 设置
* @param orders
*/
public void setOrders(List<Order> orders) {
this.orders = orders;
}
}
2.35 UserInfo类
public class UserInfo {
private int id;
private double height;
private double weight;
private boolean married;
public UserInfo() {
}
public UserInfo(int id, double height, double weight, boolean married) {
this.id = id;
this.height = height;
this.weight = weight;
this.married = married;
}
/**
* 获取
* @return id
*/
public int getId() {
return id;
}
/**
* 设置
* @param id
*/
public void setId(int id) {
this.id = id;
}
/**
* 获取
* @return height
*/
public double getHeight() {
return height;
}
/**
* 设置
* @param height
*/
public void setHeight(double height) {
this.height = height;
}
/**
* 获取
* @return weight
*/
public double getWeight() {
return weight;
}
/**
* 设置
* @param weight
*/
public void setWeight(double weight) {
this.weight = weight;
}
/**
* 获取
* @return married
*/
public boolean isMarried() {
return married;
}
/**
* 设置
* @param married
*/
public void setMarried(boolean married) {
this.married = married;
}
public String toString() {
return "UserInfo{id = " + id + ", height = " + height + ", weight = " + weight + ", married = " + married + "}";
}
}
test包
2.36 TestMyBatis类
//测试类
public class TestMyBatis {
//删除用户信息(有外键约束的用户信息不能删除)
@Test
public void test01(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteUser(6);
MyBatisUtils.commitAndClose(sqlSession);
}
//修改用户信息
@Test
public void test02(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User(3, "净坛使者", Date.valueOf("2021-05-12"), "男", "高老庄");
mapper.updateUser(user);
MyBatisUtils.commitAndClose(sqlSession);
}
//添加用户信息
@Test
public void test03(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User(0, "小白龙", Date.valueOf("2021-05-05"), "男", "东海");
mapper.addUser(user);
System.out.println(user);
MyBatisUtils.commitAndClose(sqlSession);
}
//查询用户信息
@Test
public void test04(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.findUserById(7);
System.out.println(user);
sqlSession.close();//查询不需要提交事务(不涉及对表数据的修改)
}
//多表查询
@Test
public void test05(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapperMoreTable mapper = sqlSession.getMapper(UserMapperMoreTable.class);
User user = mapper.finUserById(2);
System.out.println(user); //打印用户所有信息
System.out.println(user.getOrders()); //获取订单信息
System.out.println(user.getUserInfo()); //获取扩展信息
System.out.println(user.getUsername()); //user.getXxx获取用户的某个具体字段信息
sqlSession.close(); //查询不需要提交事务(不涉及对表数据的修改)
}
}
utils包
2.37 MyBatisUtils类
public class MyBatisUtils {
// 一个项目中只需要一个SqlSessionFactory
private static SqlSessionFactory sqlSessionFactory;
static {
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
sqlSessionFactory = builder.build(MyBatisUtils.class.getResourceAsStream("/mybatis-config.xml"));
}
// 每次操作数据库都需要一个新的SqlSession
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
public static SqlSession getSqlSession(boolean autoCommit) {
return sqlSessionFactory.openSession(autoCommit);
}
public static void commitAndClose(SqlSession sqlSession) {
sqlSession.commit();
sqlSession.close();
}
}
本人开发环境
IDEA:IntelliJ IDEA 2020.1.2
JDK:jdk-11