【MyBatis-02】一个小Demo

本文详细介绍了一个使用MyBatis实现的简单示例项目。从数据库创建、项目搭建、配置文件解析到测试代码编写,一步步引导读者完成一个基本的增删改查操作。

上一节讲解了mybatis的概要介绍及宏观流程,可能大家知道一些概念,本章我们来一个简单的demo


1.创建数据库course_mybatis,并在其上创建表class_info:

CREATE TABLE `class_info` (
  `classid` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `classname` varchar(255) DEFAULT NULL,
  `classlocation` varchar(255) DEFAULT NULL,
  `memo` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`classid`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;


2.创建java项目 mybatisdemo01,并创建一个lib文件夹


3.导入jar包


4.将jar包添加到build path... 这一步就不贴图了,截止这里,工程文件就创建好了。

5.在项目上添加source folder -->config







6.在config中添加全局配置文件,名称建议是SqlMapConfig.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>
	<environments default="defaultEnvironment">
		<environment id="defaultEnvironment">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/course_mybatis?useUnicode=true&characterEncoding=utf8" />
				<property name="username" value="root" />
				<property name="password" value="root" />
			</dataSource>
		</environment>
	</environments>
</configuration>


7.如下为解释:



8.创建pojo类,用来映射输出结果的类型

package com.jumore.mybatisdemo01.pojo;

public class ClassInfo {

	private int classid;
	private String classname;
	private String classlocation;
	private String memo;

	public int getClassid() {
		return classid;
	}

	public void setClassid(int classid) {
		this.classid = classid;
	}

	public String getClassname() {
		return classname;
	}

	public void setClassname(String classname) {
		this.classname = classname;
	}

	public String getClasslocation() {
		return classlocation;
	}

	public void setClasslocation(String classlocation) {
		this.classlocation = classlocation;
	}

	public String getMemo() {
		return memo;
	}

	public void setMemo(String memo) {
		this.memo = memo;
	}

	@Override
	public String toString() {
		return "ClassInfo [classid=" + classid + ", classname=" + classname + ", classlocation=" + classlocation
				+ ", memo=" + memo + "]";
	}
}



9.在config文件夹中创建ClassInfoMapper.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="mybatisdemo01">
	<select id="findClassById" parameterType="int"
		resultType="com.jumore.mybatisdemo01.pojo.ClassInfo">
		SELECT * from class_info where classid=#{id}
	</select>
</mapper>



10.对代码的解释


11.创建测试代码

package mybatisdemo01.test;

import java.io.IOException;
import java.io.InputStream;

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.Test;

import com.jumore.mybatisdemo01.pojo.ClassInfo;


public class Mybatis01Test {
	
	@Test
	public void findUserByIdTest() throws IOException{
		
		//全局配置文件的文件名
		String resource="SqlMapConfig.xml";
		
		//将全局配置文件加载到Stream中
		InputStream is=Resources.getResourceAsStream(resource);
		
		//根据全局配置文件创建SqlSessionFactory
		SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);
		
		//生成SqlSession
		SqlSession sqlSession=sqlSessionFactory.openSession();
		
		//使用SqlSession执行指定的statement,并将结果返回给指定参数
		ClassInfo classInfo=sqlSession.selectOne("mybatisdemo01.findClassById", 1);
		
		//打印结果
		System.out.println(classInfo);
	}
}

12.整体的目录结构为:




<think> 我们被要求生成使用Spring Boot和MyBatis-Plus的示例代码。根据引用,我们需要添加MyBatis-Plus的依赖。同时,引用[2]还提到了mybatis-plus-join-boot-start,但这里我们只关注MyBatis-Plus的基本使用。 示例代码将包括: 1. 添加依赖(pom.xml) 2. 配置数据源(application.yml 或 application.properties) 3. 创建实体类(映射数据库表) 4. 创建Mapper接口(继承MyBatis-Plus的BaseMapper) 5. 编写Service层(可选,可以使用MyBatis-Plus的IService) 6. 编写Controller层 注意:这里我们假设已经有一个数据库表,例如`user`表,包含id, name, age等字段。 步骤: 1. 添加依赖(以引用[1]和[2]中提到的版本为例,但这里我们使用引用[1]中的属性占位符,实际项目需要定义属性) 在pom.xml中添加: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis-plus.version}</version> </dependency> ``` 同时,我们还需要数据库驱动(如MySQL)和Spring Boot的Web起步依赖等。 2. 配置数据源,例如在application.yml中: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver ``` 3. 创建实体类User: ```java import com.baomidou.mybatisplus.annotation.TableName; @TableName("user") // 如果表名和实体类名一致(忽略大小写),可以省略 public class User { private Long id; private String name; private Integer age; // 省略getter和setter,以及构造方法 } ``` 4. 创建Mapper接口UserMapper: ```java import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; @Mapper public interface UserMapper extends BaseMapper<User> { // 继承了BaseMapper,已经包含了基本的CRUD方法 } ``` 5. 创建Service层(可选): ```java public interface UserService extends IService<User> { } @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { } ``` 6. 创建Controller: ```java @RestController @RequestMapping("/user") public class UserController { @Autowired private UserMapper userMapper; // 或者注入UserService @GetMapping("/list") public List<User> list() { return userMapper.selectList(null); // 查询所有用户 } } ``` 7. 在启动类上添加@MapperScan注解,扫描Mapper接口(如果每个Mapper都加了@Mapper注解,则可以不写): ```java @SpringBootApplication @MapperScan("com.example.mapper") // 替换成你的Mapper接口所在的包 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 注意:以上代码仅为示例,实际项目中需要根据具体表结构和业务进行调整。 根据引用[3],MyBatis-Plus提供了强大的CRUD操作和条件构造器,因此我们可以很方便地进行数据库操作。 下面我们给出一个完整的示例代码结构(简化版): </think> 以下是一个使用 Spring Boot 整合 MyBatis-Plus 的完整示例代码,包含基础配置和 CRUD 操作实现: ### 1. 添加依赖 (`pom.xml`) ```xml <dependencies> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MyBatis-Plus 核心依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.5</version> </dependency> <!-- MySQL 驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- Lombok 简化代码 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> ``` ### 2. 配置文件 (`application.yml`) ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: configuration: map-underscore-to-camel-case: true # 自动驼峰命名转换 global-config: db-config: id-type: auto # 主键自增 ``` ### 3. 实体类 (`User.java`) ```java @Data @TableName("t_user") // 对应数据库表名 public class User { @TableId(type = IdType.AUTO) // 主键自增 private Long id; private String name; private Integer age; private String email; @TableField(fill = FieldFill.INSERT) // 自动填充创建时间 private LocalDateTime createTime; } ``` ### 4. Mapper 接口 (`UserMapper.java`) ```java @Mapper public interface UserMapper extends BaseMapper<User> { // 继承 BaseMapper 即获得基础 CRUD 能力 // 可在此扩展自定义 SQL } ``` ### 5. Service 层 (`UserService.java`) ```java public interface UserService extends IService<User> { // 扩展业务方法 } @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { } ``` ### 6. Controller 层 (`UserController.java`) ```java @RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; // 新增用户 @PostMapping public boolean saveUser(@RequestBody User user) { return userService.save(user); } // 根据ID查询 @GetMapping("/{id}") public User getById(@PathVariable Long id) { return userService.getById(id); } // 条件查询 @GetMapping public List<User> queryUsers(String name) { LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); wrapper.like(StringUtils.isNotBlank(name), User::getName, name); return userService.list(wrapper); } // 分页查询 @GetMapping("/page") public Page<User> pageUsers(@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size) { return userService.page(new Page<>(page, size)); } } ``` ### 7. 主启动类 (`Application.java`) ```java @SpringBootApplication @MapperScan("com.example.mapper") // 扫描 Mapper 接口 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` ### 功能说明 1. **基础 CRUD**:通过继承 `BaseMapper` 自动获得 2. **条件构造器**:使用 `LambdaQueryWrapper` 构建安全查询 3. **自动填充**:通过 `@TableField(fill = FieldFill.INSERT)` 实现 4. **分页查询**:内置 `Page` 对象支持物理分页 5. **驼峰映射**:自动转换 `user_name` → `userName` ### 技术要点 1. `BaseMapper` 已包含 17 个基础方法: ```java int insert(T entity); int deleteById(Serializable id); int updateById(T entity); T selectById(Serializable id); List<T> selectList(Wrapper<T> wrapper); ``` 2. **条件构造器** 示例: ```java // 查询年龄大于18且邮箱不为空的用户 new LambdaQueryWrapper<User>() .gt(User::getAge, 18) .isNotNull(User::getEmail); ``` 3. **自动填充** 需实现 `MetaObjectHandler`: ```java @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("createTime", LocalDateTime.now(), metaObject); } } ``` [^1]: MyBatis-Plus 官方文档建议通过继承基础接口快速实现 CRUD [^2]: 分页查询需注册分页拦截器(高版本自动配置) [^3]: 实体类注解简化了 ORM 映射配置
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值