MyBatis注解开发方式

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值