這兩天學習了一下SpringBoot的相關內容,記錄一下
1.創建一個SpringBoot項目后,引入依賴(其中lombok插件需要自己安裝)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.jt.1902</groupId> <artifactId>springboot-mybatis</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <java.version>1.8</java.version> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> <relativePath /> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--添加屬性注入依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <!--引入插件lombok 自動的set/get/構造方法插件 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!--支持熱部署 --> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <!--引入數據庫驅動 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!--引入druid數據源 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.12</version> </dependency> <!--spring整合mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.6</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2.創建如下結構文件
(1)表的結構:

DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` char(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `age` int(11) NULL DEFAULT NULL, `sex` char(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, INDEX `cc`(`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 56 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; SET FOREIGN_KEY_CHECKS = 1;
(2)編寫實體類com.jt.pojo.User
@Accessors 注解用來配置lombok如何產生和顯示getters和setters的方法。
chain表示生成的方法名是setxx() getxx()的樣子
@Data //set/get/toString @Accessors(chain = true) //鏈式加載 @NoArgsConstructor //無參構造 @AllArgsConstructor //有參構造 @TableName("user") //對象與數據表完成映射 public class User implements Serializable{ @TableId(type=IdType.AUTO) //主鍵自動 private Integer id; //@TableField("name") private String name; //@TableId("age") private Integer age; private String sex;
}
(3)編寫接口com.jt.mapper.UserMapper
該接口繼承自mybatisplus的BaseMapper接口
public interface UserMapper extends BaseMapper<User>{ //查詢全部的user表中的數據 List<User> findAll(); /** * 規定: Mybatis中要求數據傳參必須是單值 * 方案: * 0.本身就是單值 id * 1.利用對象將數據封裝 id age name * 2.將數據封裝為map集合. @Param("key")int id * 3.將數據封裝為array/list * @param user * @return */ @Insert("insert into user values(null,#{name},#{age},#{sex})") int insertUser(User user); //實現用戶修改 age=18的 名稱改為xxx @Update("update user set name=#{name} where age=#{age}") int updateUser(User user); }
(4)編寫在resources文件中創建mybatis/mapper/UserMapper.xml文件
namespace與接口對應,id與方法名對應
<?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="com.jt.mapper.UserMapper"> <select id="findAll" resultType="com.jt.pojo.User"> select * from user </select> <!-- <insert id="insertUser"> insert into user values(null,#{name},#{age},#{sex}) </insert> --> <!-- <update id="updateUser"> update user set name=#{name} where age=#{age} </update> --> </mapper>
(5)編寫接口com,jt.service.UserService
public interface UserService { List<User> findAll(); int insertUser(User user); int updateUser(User user); }
(6)編寫實現類com.jt.service.UserServiceImpl
在實現類里利用@AutoWired注解進行自動裝配,而不是在接口上
@Service public class UserServiceImpl implements UserService{ @Autowired private UserMapper userMapper; @Override public List<User> findAll() { return userMapper.findAll(); } @Override public int insertUser(User user) { return userMapper.insertUser(user); } @Override public int updateUser(User user) { return userMapper.updateUser(user); } }
(7)編寫API接口com.jt.Controller.UserController
@RestController注解相當於@ResponseBody + @Controller合在一起的作用
@RestController public class UserController { @Autowired private UserService userService; //用戶通過localhost:8090/findAll獲取用戶數據 @RequestMapping("/findAll") public List<User> findAll(){ return userService.findAll(); } //用戶新增 public int insertUser(User user) { return userService.insertUser(user); } public int updateUser(User user) { return userService.updateUser(user); }
(8)在啟動類中加入對接口的掃描
@SpringBootApplication //為mapper接口創建代理對象 @MapperScan("com.jt.mapper") public class SpringBootRun { public static void main(String[] args) { SpringApplication.run(SpringBootRun.class, args); } }
3.配置文件
在resources中創建application.yml文件,並編寫配置
server: port: 8090 servlet: context-path: / #引入數據源配置 spring: datasource: #引入druid數據源 type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true username: root password: root #mybatis-plush配置 mybatis-plus: #配置別名包 type-aliases-package: com.jt.pojo #配置mapper映射 mapper-locations: classpath:/mybatis/mappers/*.xml #開啟駝峰映射 configuration: map-underscore-to-camel-case: true #添加日志輸出 logging: level: com.jt.mapper: debug
4.啟動並測試
(1)測試UserMapper接口
@SpringBootTest @RunWith(SpringRunner.class) public class TestCRUD { @Autowired //從容器中取值 private UserController userController; @Test public void insertUser() { User user = new User(); user.setName("小橘子").setSex("女").setAge(18); userController.insertUser(user); System.out.println("入庫成功!!!!!"); } //測試修改 @Test public void testUpdate() { User user = new User(); user.setAge(18).setName("哈利波特!!!"); userController.updateUser(user); } }
(2測試MybatisPlus
@SpringBootTest @RunWith(SpringRunner.class) public class TestMybatisPlus { @Resource private UserMapper userMapper; @Test public void insert() { User user = new User(); user.setName("mybatisplus"); user.setAge(19); user.setSex("男"); int rows = userMapper.insert(user); System.out.println("影響行數:"+rows); } /**查詢用戶列表信息 將對象中不為null的屬性當做where條件 條件:age=18 關鍵字說明: = eq,> gt,< lt,ge >=,le <= */ @Test public void testFind() { //1.方式1.使用對象封裝 //User user = new User(); //user.setAge(18); //2.直接使用字段賦值 QueryWrapper<User> queryWrapper = new QueryWrapper<User>(); //測試等於 //queryWrapper.eq("age",18); //測試大於 queryWrapper.ge("age",18); List<User> userList = userMapper.selectList(queryWrapper); System.out.println(userList); } /** * 3.數據更新 將年齡為18歲的用戶改19歲 * entity:需要修改數據的值 * updateWrapper 條件構造器 充當where條件 */ @Test public void testUpdate() { User user = new User(); user.setAge(19); UpdateWrapper<User> updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("age", 18); userMapper.update(user, updateWrapper); } //刪除name字段為null的數據 @Test public void deleteUser() { QueryWrapper<User> queryWrapper = new QueryWrapper<User>(); queryWrapper.isNull("name"); userMapper.delete(queryWrapper); } }
@Data //set/get/toString @Accessors(chain = true) //鏈式加載 @NoArgsConstructor //無參構造 @AllArgsConstructor //有參構造 @TableName("user") //對象與數據表完成映射 public class User implements Serializable{ @TableId(type=IdType.AUTO) //主鍵自動 private Integer id; //@TableField("name") private String name; //@TableId("age") private Integer age; private String sex; }