L'assemblage automatique est le cœur de springboot De manière générale, l'assemblage automatique sera associé à springboot. En fait, Spring Framework a déjà implémenté cette fonction. Spring Boot ne l'optimise davantage que via SPI.
SpringBoot définit un ensemble de spécifications d'interface Cet ensemble de spécifications stipule que SpringBoot analysera le fichier META-INF/spring.factories dans le package jar de référence externe au démarrage et chargera les informations de type configurées dans le fichier. Accédez au conteneur Spring (cela implique le mécanisme de chargement de classe JVM et la connaissance du conteneur Spring) et effectuez diverses opérations définies dans la classe. Pour les fichiers jar externes, il vous suffit de suivre les normes définies par SpringBoot pour installer vos propres fonctions dans SpringBoot
@EnableAutoConfiguration : Scan package scope Default current. classe.
@ComponentScan(" ") La portée d'analyse du package est par défaut toutes les classes sous l'ensemble du package où se trouve la classe actuelle.
La plage d'analyse des packages est supérieure à @EnableAutoConfiguration, et @ComponentScan(" ") s'appuie sur @EnableAutoConfiguration pour démarrer le programme.
@EnableAutoConfiguration
@ComponentScan("Third Party Package")
app.run()
@SpringBootApplication Analyse la gamme de packages frères et sœurs et le package actuel.
@SpringBootApplication La couche inférieure est équivalente à @EnableAutoConfiguration+@ComponentScan. N'analysez pas les packages tiers
1. Importez d'abord les dépendances pertinentes
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>com.spring4all</groupId> <artifactId>swagger-spring-boot-starter</artifactId> <version>1.9.1.RELEASE</version> </dependency> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>swagger-bootstrap-ui</artifactId> <version>1.7.8</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>#🎜. 🎜#2. Créez une table de données et ajoutez des données
DROP TABLE IF EXISTS `category`; CREATE TABLE `category` ( `cid` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, `cname` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL, PRIMARY KEY (`cid`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of category -- ---------------------------- INSERT INTO `category` VALUES ('c001', '家电'); INSERT INTO `category` VALUES ('c002', '鞋服'); INSERT INTO `category` VALUES ('c003', '化妆品'); INSERT INTO `category` VALUES ('c004', '汽车'); -- ---------------------------- -- Table structure for products -- ---------------------------- DROP TABLE IF EXISTS `products`; CREATE TABLE `products` ( `pid` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL, `pname` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL, `price` int NULL DEFAULT NULL, `flag` varchar(2) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL, `category_id` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL, PRIMARY KEY (`pid`) USING BTREE, INDEX `category_id`(`category_id`) USING BTREE, CONSTRAINT `products_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `category` (`cid`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of products -- ---------------------------- INSERT INTO `products` VALUES ('p001', '小\r\n米电视 机', 5000, '1', 'c001'); INSERT INTO `products` VALUES ('p002', '格\r\n力空调', 3000, '1', 'c001'); INSERT INTO `products` VALUES ('p003', '美\r\n的冰箱', 4500, '1', 'c001'); INSERT INTO `products` VALUES ('p004', '篮\r\n球鞋', 800, '1', 'c002'); INSERT INTO `products` VALUES ('p005', '运\r\n动裤', 200, '1', 'c002'); INSERT INTO `products` VALUES ('p006', 'T\r\n恤', 300, '1', 'c002'); INSERT INTO `products` VALUES ('p009', '篮球', 188, '1', 'c002');3 Créez le répertoire suivant dans le projet 4. . Créez application.propertis sous ressources et configurez la source de données
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.username=root spring.datasource.password=123456 spring.datasource.url=jdbc:mysql:///springboot #日志 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl mybatis.mapper-locations=classpath:mapper/*.xml5 Créez la classe d'entité sous le pojo
package com.azy.pojo; import java.io.Serializable; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * products * @author */ @Data @AllArgsConstructor @NoArgsConstructor @TableName(value = "products") public class Products implements Serializable { @TableId(type = IdType.AUTO) private String pid; public Products(String pid, String pname, Integer price) { this.pid = pid; this.pname = pname; this.price = price; } private String pname; private Integer price; private String flag; private String category_id; @TableField(exist = false) private Category category; private static final long serialVersionUID = 1L; }6. parce que mybatisplus encapsule l'ajout, la suppression, la modification et l'interrogation d'une seule table, tout ce que vous avez à faire est d'hériter de l'interface BaseMapper.
package com.azy.dao; import com.azy.pojo.Products; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; /** * @ fileName:ProductsDao * @ description: * @ author:Azy * @ createTime:2023/4/11 18:57 * @ version:1.0.0 */ public interface ProductsDao extends BaseMapper<Products> { IPage<Products> findPage(IPage<Products> iPage, @Param("ew") Wrapper<Products> wrapper); }7 Créez ProductsDao.xml sous le mappeur sous ressources#🎜🎜. #
<?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.azy.dao.ProductsDao"> <resultMap id="ProductsMap" type="com.azy.pojo.Products" autoMapping="true"> <id property="pid" column="pid" jdbcType="VARCHAR"/> <result property="pname" column="pname" jdbcType="VARCHAR"/> <result property="price" column="price" jdbcType="INTEGER"/> <result property="flag" column="flag" jdbcType="VARCHAR"/> <result property="category_id" column="category_id" jdbcType="VARCHAR"/> <association property="category" javaType="com.azy.pojo.Category" autoMapping="true"> <id column="cid" property="cid" jdbcType="VARCHAR"/> <result property="cname" column="cname" jdbcType="VARCHAR"/> </association> </resultMap> <select id="findPage" resultType="com.azy.pojo.Products" resultMap="ProductsMap"> select * from products p join category c on p.category_id=c.cid <if test="ew!=null"> <where> ${ew.sqlSegment} </where> </if> </select> </mapper>
8. Dans la classe de test sous le package de test Test
package com.azy; import com.azy.dao.ProductsDao; import com.azy.dao.UserDao; import com.azy.pojo.Products; import com.azy.pojo.User; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource; import java.util.List; @SpringBootTest class DemoApplicationTests { @Resource private UserDao userDao; @Test void contextLoads() { QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.likeRight("name","_z"); wrapper.or(); wrapper.between("age",10,20); wrapper.orderByDesc("age"); wrapper.select("name","age"); List<User> users = userDao.selectList(wrapper); users.forEach(System.out::println); } @Test public void delete(){ System.out.println(userDao.deleteById(5)); } @Test public void insert(){ User user = new User(); user.setAge(18); user.setName("cxk"); user.setEmail("123@qq.com"); System.out.println(userDao.insert(user)); } @Test public void update(){ User user = new User(); user.setAge(19); user.setName("azy"); user.setEmail("321@qq.com"); user.setId(6L); System.out.println(userDao.updateById(user)); } @Test public void selectById(){ System.out.println(userDao.selectById(4)); } @Test public void testPage(){ Page<User> page = new Page<>(1, 3);//current:当前第几页 size:每页显示条数 userDao.selectPage(page,null);//把查询分页的结构封装到page对象中 System.out.println("当前页的记录"+page.getRecords());//获取当前页的记录 System.out.println("获取总页数"+page.getPages());//获取当前页的总页数 System.out.println("获取总条数"+page.getTotal());//获取当前页的记录 } // ============================================================== @Resource private ProductsDao productsDao; @Test public void testQueryProductById(){ System.out.println(productsDao.selectById("p008")); } @Test public void testDelete(){ System.out.println(productsDao.deleteById("p008")); } @Test public void testInsert(){ Products products = new Products(); products.setPname("滑板鞋"); products.setFlag("2"); products.setPrice(8888); products.setCategory_id("c002"); products.setPid("p009"); System.out.println(productsDao.insert(products)); } @Test public void testUpdate(){ Products products = new Products(); products.setPname("篮球"); products.setFlag("1"); products.setPrice(188); products.setCategory_id("c002"); products.setPid("p009"); System.out.println(productsDao.updateById(products)); } @Test public void testProductsPage(){ Page<Products> page = new Page<>(1, 3);//current:当前第几页 size:每页显示条数 productsDao.selectPage(page,null);//把查询分页的结构封装到page对象中 System.out.println("当前页的记录"+page.getRecords());//获取当前页的记录 System.out.println("获取总页数"+page.getPages());//获取当前页的总页数 System.out.println("获取总条数"+page.getTotal());//获取当前页的记录 } @Test public void testProductsPage2(){ Page<Products> page=new Page<>(1,3); QueryWrapper<Products> wrapper=new QueryWrapper<>(); wrapper.gt("price",1000); productsDao.findPage(page,wrapper); System.out.println("当前页的记录"+page.getRecords());//获取当前页的记录 System.out.println("获取总页数"+page.getPages());//获取当前页的记录 System.out.println("获取总条数"+page.getTotal());//获取当前页的记录 } }
9. Enfin, exécutez la classe de test
#. 🎜🎜#Test terminé
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!