创建Mybatis-Spring工程

创建一个maven项目,取名为mybatis

在pom.xml中添加依赖

注意:依赖必须放在<dependencies> </dependencies>之间

<dependencies> 

<dependency>
 <groupId>org.mybatis</groupId>
 <artifactId>mybatis</artifactId>
 <version>3.5.6</version>
</dependency>

<dependency>
 <groupId>org.mybatis</groupId>
 <artifactId>mybatis-spring</artifactId>
 <version>2.0.6</version>
</dependency>

<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-context</artifactId>
 <version>5.3.14</version>
</dependency>

<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-jdbc</artifactId>
 <version>5.3.14</version>
</dependency>

<dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>8.0.21</version>
</dependency>

<dependency>
 <groupId>org.apache.commons</groupId>
 <artifactId>commons-dbcp2</artifactId>
 <version>2.8.0</version>
</dependency>

<dependency>
 <groupId>org.junit.jupiter</groupId>
 <artifactId>junit-jupiter-api</artifactId>
 <version>5.7.0</version>
 <scope>test</scope>
</dependency>

</dependencies>

加入依赖后

 创建完成后,在src/test/java下创建测试类MybatisTests

package cn.tedu.mybatis;
import org.junit.jupiter.api.Test;
public class MybatisTests {
    @Test
    public void contextLoads() {
        System.out.println("MybatisTests.contextLoads()");
    }
}

登录MySQL控制台,创建名为mall_ams的数据库

CREATE DATABASE mall_ams;

在IntelliJ IDEA中配置数据库视图
– http://doc.canglaoshi.org/doc/idea_database/index.html

通过数据库视图的Console面板创建数据表:

create table ams_admin ( id bigint unsigned auto_increment, username varchar(50) default null unique comment '用户名', password char(64) default null comment '密码(密文)', nickname varchar(50) default null comment '昵称', avatar varchar(255) default null comment '头像URL', phone varchar(50) default null unique comment '手机号码', email varchar(50) default null unique comment '电子邮箱', description varchar(255) default null comment '描述', is_enable tinyint unsigned default 0 comment '是否启用,1=启用,0=未启用', last_login_ip varchar(50) default null comment '最后登录IP地址(冗余)', login_count int unsigned default 0 comment '累计登录次数(冗余)', gmt_last_login datetime default null comment '最后登录时间(冗余)', gmt_create datetime default null comment '数据创建时间', gmt_modified datetime default null comment '数据最后修改时间', primary key (id) ) comment '管理员' charset utf8mb4;

在src/main/resources下创建datasource.properties配置文件,用于配置连接数据库的参数

datasource.url=jdbc:mysql://localhost:3307/mall_amsuseUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
datasource.driver=com.mysql.cj.jdbc.Driver
datasource.username=root
datasource.password=123

在cn.tedu.mybatis包下创建SpringConfig类

package cn.tedu.mybatis;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@PropertySource("classpath:datasource.properties")
public class SpringConfig {
}

 提示:@PropertySource是Spring框架的注解,用于读取properties类
型的配置文件,读取到的值将存入到Spring容器的Environment对象中

在类MybatisTests中补充以下代码

package cn.tedu.mybatis;
import org.junit.jupiter.api.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
public class MybatisTests {
    @Test
    public void contextLoads() {
        System.out.println("MybatisTests.contextLoads()");
        AnnotationConfigApplicationContext ac
                = new AnnotationConfigApplicationContext(SpringConfig.class);
        ConfigurableEnvironment env = ac.getEnvironment();
        System.out.println("env url=" + env.getProperty("datasource.url"));
        System.out.println("env driver=" + env.getProperty("datasource.driver"));
        System.out.println("env username=" + env.getProperty("datasource.username"));
        System.out.println("env password=" + env.getProperty("datasource.password"));
        ac.close();
    }
}

在SpringConfig中配置一个DataSource对象:

package cn.tedu.mybatis;
import org.apache.commons.dbcp2.BasicDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import javax.sql.DataSource;
@Configuration
@PropertySource("classpath:datasource.properties")
public class SpringConfig {
    @Bean
    public DataSource dataSource(Environment env) {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setUrl(env.getProperty("datasource.url"));
        dataSource.setDriverClassName(env.getProperty("datasource.driver"));
        dataSource.setUsername(env.getProperty("datasource.username"));
        dataSource.setPassword(env.getProperty("datasource.password"));
        return dataSource;
    }
}

在类MybatisTests中补充  testGetConnection()  代码

  @Test
    public void testGetConnection() throws Exception {
        AnnotationConfigApplicationContext ac
                = new AnnotationConfigApplicationContext(SpringConfig.class);
        DataSource dataSource = (DataSource) ac.getBean("dataSource");
        Connection connection = dataSource.getConnection();
        System.out.println("MybatisTests.testGetConnection");
        System.out.println(connection);
        ac.close();
    }

在cn.tedu.mybatis包下创建Admin类,声明一系列的属性,

并按快捷键Ctrl+Ins 点击 Getter & Setter 和 toString()

package cn.tedu.mybatis.entity;

import java.time.LocalDateTime;

public class Admin {
    private String username;              private String password;
    private String nickname;              private String avatar;
    private String phone;                 private String email;
    private String description;           private Integer isEnable;
    private String lastLoginIp;           private Integer loginCount;
    private LocalDateTime gmtLastLogin;   private LocalDateTime gmtCreate;
    private LocalDateTime gmtModified;
//按快捷键Ctrl+Ins      点击 Getter & Setter 和 toString()
}

在cn.tedu.mybatis包下创建mapper.AdminMapper接口,并
在接口中添加“插入1条管理员数据”的抽象方法

package cn.tedu.mybatis.mapper;
import cn.tedu.mybatis.entity.Admin;
public interface AdminMapper {
    int insert(Admin admin);
}

所有用于Mybatis处理数据的接口都必须被Mybatis识别

  1.  在每个接口上添加@Mapper注解
  2. 在配置类上添加@MapperScan注解,指定接口所在的根包

 在SpringConfig上添加配置@MapperScan:

多加一个配置  @MapperScan("cn.tedu.mybatis.mapper")

@Configuration
@PropertySource("classpath:datasource.properties")
@MapperScan("cn.tedu.mybatis.mapper")
public class SpringConfig {
    ... ...
}

注意:因为Mybatis会扫描以上配置的包,并自动生成包中各接口中的代理对象,所以,千万不要放其它接口文件

在项目的src/main/resources下创建mapper文件夹,重命名AdminMapper.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="cn.tedu.mybatis.mapper.AdminMapper">
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
    insert into ams_admin (
    username, password, nickname, avatar,
    phone, email, description, is_enable,
    last_login_ip, login_count, gmt_last_login,
    gmt_create, gmt_modified
    ) values (
    #{username}, #{password}, #{nickname}, #{avatar},
    #{phone}, #{email}, #{description}, #{isEnable},
    #{lastLoginIp}, #{loginCount}, #{gmtLastLogin},
    #{gmtCreate}, #{gmtModified}
    )
</insert>
</mapper>

将 DataSource 配置给Mybatis框架,并且为 Mybatis 配置 XML 文件的路径,这2项配置都将通过配置 SqlSessionFactoryBean

datasource.properties中补充一条配置

mybatis.mapper-locations=classpath:mapper/AdminMapper.xml

在配置类SpringConfig中创建SqlSessionFactoryBean类型的对象:

 @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(
            DataSource dataSource, @Value("${mybatis.mapper-locations}")
            Resource mapperLocations) {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setMapperLocations(mapperLocations);
        return sqlSessionFactoryBean;
    }

测试类中补充测试方法,以检验是否可以通过调用AdminMapper的
insert()方法插入数据:

@Test
public void testInsert() {
 AnnotationConfigApplicationContext ac
 = new AnnotationConfigApplicationContext(SpringConfig.class);
 AdminMapper adminMapper = ac.getBean(AdminMapper.class);
 Admin admin = new Admin();
 admin.setUsername("admin001");
 admin.setPassword("12345678");
 adminMapper.insert(admin);
 ac.close();
}

  某数据的id是自动编号,需要插入数据类型对应的id属性,在Admin 中添加id属性

public class Admin {
 private Long id;
// 补充id的Setter & Getter
 // 重新生成toString()和 @Override & hashCode
}

在src/main/resources/mapper/AdminMapper.xml中添加 <insert>节点并配置2个属性,分别是useGeneratedKeys和keyProperty:

   <insert id="insert" useGeneratedKeys="true" keyProperty="id">
        insert into ams_admin (
          ........   )
    </insert>

删除数据

AdminMapper接口中添加抽象方法:

public interface AdminMapper {
  ....
    int deleteById(Long id);
}

AdminMapper.xml中配置以上抽象方法映射的SQL语句:

<?xml version="1.0" encoding="UTF-8" ?>
       ......
<mapper namespace="cn.tedu.mybatis.mapper.AdminMapper">

    <insert id="insert" useGeneratedKeys="true" keyProperty="id">
      .......
    </insert>
    
    <delete id="deleteById">
        delete from ams_admin where id=#{id}
    </delete> 

</mapper>

在编写MybatisTests中 添加 @Test   testDeleteById()  执行测试:

 @Test
    public void testDeleteById() {
        AnnotationConfigApplicationContext ac
                = new AnnotationConfigApplicationContext(SpringConfig.class);
        AdminMapper adminMapper = ac.getBean(AdminMapper.class);
        Long id = 12L;
        int rows = adminMapper.deleteById(id);
        // System.out.println("删除完成,受影响的行数=" + rows);
        if (rows == 1) {
            System.out.println("删除成功");
        } else {
            System.out.println("删除失败,尝试删除的数据(id=" + id + ")不存在!");
        }
        ac.close();
    }
}

修改数据

AdminMapper接口中添加抽象方法:

public interface AdminMapper {
   ....
    int updatePasswordById(@Param("id") Long id,
                           @Param("password") String password);
}

在AdminMapper.xml中配置以上抽象方法映射的SQL语句:

    <insert id="insert" useGeneratedKeys="true" keyProperty="id">
     ....
    </insert>
    <delete id="deleteById">
        ....
    </delete>
    <update id="updatePasswordById">
        update ams_admin set password=#{password} where id=#{id}
    </update>

提示:以上占位符中的名称是通过@Param注解指定的名称,而不是抽象
方法的参数名称

在编写MybatisTests中 添加 @Test    testUpdatePasswordById() 执行测试:

@Test
public void testUpdatePasswordById() {
 AnnotationConfigApplicationContext ac
 = new AnnotationConfigApplicationContext(SpringConfig.class);
 AdminMapper adminMapper = ac.getBean(AdminMapper.class);
 Long id = 12L;
 String password = "000000";
 int rows = adminMapper.updatePasswordById(id, password);
 if (rows == 1) {
 System.out.println("修改密码成功");
 } else {
 System.out.println("修改密码失败,尝试访问的数据(id=" + id + ")不存在!");
 }
 ac.close();
}

查询数据

AdminMapper接口中添加抽象方法

public interface AdminMapper {
  ....
   int count();
}

AdminMapper.xml中配置以上抽象方法映射的SQL语句:

<select id="count" resultType="int">
        select count(*) from ams_admin
    </select>

在编写MybatisTests中 添加 @Test   testCount() 执行测试:

@Test
public void testCount() {
 AnnotationConfigApplicationContext ac
 = new AnnotationConfigApplicationContext(SpringConfig.class);
 AdminMapper adminMapper = ac.getBean(AdminMapper.class);
 int count = adminMapper.count();
 System.out.println("当前表中有" + count + "条记录");
 ac.close();
}

查询数据--查询某1条记录

AdminMapper接口中添加抽象方法:

public interface AdminMapper {
  ....
  Admin getById(Long id);
}

在AdminMapper.xml中配置以上抽象方法映射的SQL语句:

<select id="getById" resultType="cn.tedu.mybatis.entity.Admin">
        select * from ams_admin where id=#{id}
    </select>

在编写MybatisTests中 添加 @Test  testGetById()执行测试:

@Test
public void testGetById() {
 AnnotationConfigApplicationContext ac
 = new AnnotationConfigApplicationContext(SpringConfig.class);
 AdminMapper adminMapper = ac.getBean(AdminMapper.class);
 Long id = 3L;
 Admin admin = adminMapper.getById(id);
 System.out.println("查询结果:" + admin);
 ac.close();
}

查询数据--查询列表

AdminMapper接口中添加抽象方法:

public interface AdminMapper {
  ....
   List<Admin> list();
}

在AdminMapper.xml中配置以上抽象方法映射的SQL语句:

<select id="list" resultMap="BaseResultMap">
 select * from ams_admin order by id
</select>

在编写MybatisTests中 添加 @Test testList()执行测试:

@Test
public void testList() {
 AnnotationConfigApplicationContext ac
 = new AnnotationConfigApplicationContext(SpringConfig.class);
 AdminMapper adminMapper = ac.getBean(AdminMapper.class);
 List<Admin> list = adminMapper.list();
 for (Admin admin : list) {
 System.out.println(admin);
 }
 ac.close();
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值