一、mybatis plus

针对单表的CRUD,程序员不需要写任何SQL,MP自动生成,只需要用自己的mapper实现MP中指定的一个接口即可
但是针对多表需要自己写SQL,与mybatis一致
代码生成器:通过一个简单代码实现自动生成entity、mapper、service、controller

1.1 mapper增删改测试

导入MP、MySQL依赖

  1. <!-- MP -->
  2. <dependency>
  3. <groupId>com.baomidou</groupId>
  4. <artifactId>mybatis-plus-boot-starter</artifactId>
  5. <version>3.4.1</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>mysql</groupId>
  9. <artifactId>mysql-connector-java</artifactId>
  10. </dependency>

编写entity类

@Data
@Accessors(chain = true)
@TableName("user")    //指定实体类对应的表名
public class User {
    @TableId(type = IdType.AUTO) //在主键字段上添加注解,表名是主键
    private Integer id;
    private String name;
    private Integer age;
    private String email;
}

编写UserMapper实现BaseMapper接口

@Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {

}

在src/test中的测试类中编写测试代码

@RunWith(SpringRunner.class)//让测试在spring容器环境下运行
@SpringBootTest  //表示为springboot测试类
class MybatisplusApplicationTests {
    @Autowired
    private UserMapper userMapper;

    //查询所有
    @Test
    void all() {
        //参数:条件构造器   可以用来指定查询的条件
        List<User> users = userMapper.selectList(null);
        System.out.println(users);
    }

    //insert
    @Test
    void insert(){
        User user = new User().setName("wangba").setAge(10).setEmail("111@qq.com");
        userMapper.insert(user);
    }
    //update
    @Test
    void update(){
        User user = new User().setId(1013).setName("赵六").setAge(20);
        //根据id更新数据:user中设置了哪些属性的值,就会更新哪些数据,没有赋值的则不更新
        userMapper.updateById(user);
    }
    //自定义条件更新
    @Test
    void update2(){
        User user = new User().setEmail("222@qq.com").setAge(21);
        //更新数据的条件构造器   eq等于  equals
        UpdateWrapper<User> wrapper = new UpdateWrapper<User>().eq("name","赵六");
        //
        userMapper.update(user,wrapper);
    }
    //删除
    //以id删除
    @Test
    void delById(){
        userMapper.deleteById(1013);
    }
    //以id批量删除
    @Test
    void delByIds(){
        List<Integer> ids = new ArrayList<>();
        ids.add(1006);
        ids.add(1007);
        userMapper.deleteBatchIds(ids);
    }
    //条件删除
    @Test
    void del(){
        //map中指定条件,可以存在多个条件,条件之间是and关系
        Map<String,Object> map = new HashMap<>();
        map.put("name","lisi");
        map.put("age",100);
        //where name='lisi' and age=100
        userMapper.deleteByMap(map);
    }
}

1.2 mapper查询

新建QueryTest类

@RunWith(SpringRunner.class)
@SpringBootTest
class QueryTest {
    @Autowired
    private UserMapper userMapper;
}

注意:类名不要用public修饰,测试时如果报以下错误,请导入maven相关插件

错误信息:

Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test) on project mybatisplus: There are test failures.

Please refer to D:\idea\mybatisplus\target\surefire-reports for the individual test results.

导入插件:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <configuration>
       <testFailureIgnore>true</testFailureIgnore>
   </configuration>
</plugin>

基本查询

@RunWith(SpringRunner.class)
@SpringBootTest
class QueryTest {
    @Autowired
    private UserMapper userMapper;

    //通过id查询
    @Test
    void findById(){
        User user = userMapper.selectById(1003);
        System.out.println(user);
    }
    //通过ids查询
    @Test
    void findByIds(){
        List<Integer> ids = new ArrayList<>();
        ids.add(1001);
        ids.add(1002);
        //id in (1001,1002)
        List<User> users = userMapper.selectBatchIds(ids);
        System.out.println(users);
    }
    //多条件查询  and
    @Test
    void findByMap(){
        Map<String,Object> map = new HashMap<>();
        map.put("name","lisi");
        map.put("age",20);
        List<User> users = userMapper.selectByMap(map);
        System.out.println(users);
    }
    //多条件查询  or  条件构造器
    @Test
    void findOr(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("name","lisi").or().eq("age",20);
        List<User> users = userMapper.selectList(wrapper);
        System.out.println(users);
    }
    //多条件  and 条件构造器
    @Test
    void findAnd(){
        User user = new User().setName("lisi").setAge(20);
        QueryWrapper<User> wrapper = new QueryWrapper<>(user);//将entity作为初始化参数
        List<User> users = userMapper.selectList(wrapper);
        System.out.println(users);
    }
    //between and
    @Test
    void findBetween(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.between("age",10,30);// [10,30]
        List<User> users = userMapper.selectList(wrapper);
        System.out.println(users);
    }
    //in
    @Test
    void findIn(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        // where name in ('zhangsan','lisi')
        wrapper.in("name","zhangsan","lisi");
        List<User> users = userMapper.selectList(wrapper);
        System.out.println(users);
    }
    //like 模糊查询
    @Test
    void findLike(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.like("name","%zhang%");
        List<User> users = userMapper.selectList(wrapper);
        System.out.println(users);
    }
}

分页查询

@RunWith(SpringRunner.class)
@SpringBootTest
class PageQuery {
    @Autowired
    private UserMapper userMapper;

    @Test
    void page(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();

        //获取分页对象:分页信息、数据
        Page<User> page = userMapper.selectPage(new Page<>(1,2),null);

        //总条数
        System.out.println(page.getTotal());
        //当前页的数据
        System.out.println(page.getRecords());
        //总页数
        System.out.println(page.getPages());
        //当前页
        System.out.println(page.getCurrent());
        //页大小
        System.out.println(page.getSize());
    }
}

1.3 Service查询

mybatis还提供了service接口查询

创建UserService接口

public interface UserService extends IService<User> {

}

创建对应实现类

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

}

测试类

@RunWith(SpringRunner.class)
@SpringBootTest
class ServiceImplTest {
    @Autowired
    private UserService userService;

    //插入数据
    @Test
    void insert(){
        User user = new User().setName("赵六").setAge(10).setEmail("333@qq.com");
        userService.save(user);
    }
    //批量插入
    @Test
    void inserBatch(){
        User user1 = new User().setName("赵六1").setAge(10).setEmail("333@qq.com");
        User user2 = new User().setName("赵六2").setAge(10).setEmail("333@qq.com");
        List<User> users = new ArrayList<>();
        users.add(user1);
        users.add(user2);
        //全部插入
        //userService.saveBatch(users);
        //参数2:每次插入几条  自动分成多条SQL分别插入
        userService.saveBatch(users,1);
    }
    //saveOrUpdate 插入或者更新  如果数据不存在则插入,否则更新   判断依据:主键
    @Test
    void saveOrUpdate(){
        User user = new User().setId(1017).setName("孙七2");
        userService.saveOrUpdate(user);

        //userService.saveOrUpdateBatch()  批量更新或者插入
        //userService.removeById()  以id删除
        //userService.removeByIds();  以ids批量删除
    }
    //多条件删除 and
    @Test
    void rmAnd(){
        User user = new User().setName("lisi").setAge(20);
        QueryWrapper<User> wrapper = new QueryWrapper<>(user);
        //wrapper.eq().or().eq()
        userService.remove(wrapper);
    }
    //多条件删除  or


    /**
     * 查询
     */
    //id
    @Test
    void getId(){
        User user = userService.getById(1001);
    }
    //条件查询
    @Test
    void getOne(){
        User user = new User().setName("lisi");
        QueryWrapper<User> wrapper = new QueryWrapper<>(user);
        userService.getOne(wrapper);
    }
    //查询所有
    @Test
    void all(){
        List<User> users = userService.list();
        System.out.println(users);
    }
    //分页
    @Test
    void page(){
        Page<User> page = new Page<>(1,2);
        userService.page(page);
        System.out.println(page.getTotal());
    }
    //条件分页
    @Test
    void conditionPage(){
        //分页条件
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.like("name","%a%");
        //page
        Page<User> page = new Page<>(1,2);
        //查询
        userService.page(page,wrapper);
        //数据
        System.out.println(page.getRecords());
    }
}

1.4 自定义查询

如果对mybatis-plus方法不满意也可以自己编写SQL语句

在UserMapper中添加方法编写SQL

@Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {
    @Select("select * from user")
    public List<User> all();
}

在UserService接口中添加对应方法

public interface UserService extends IService<User> {
    public List<User> all();
}

在UserServiceImpl实现类中注入UserMapper实现方法

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    @Autowired
    private UserMapper userMapper;
    @Override
    public List<User> all() {
        return userMapper.all();
    }
}

测试mapper:

//自定义SQL
@Test
void all(){
    List<User> users = userMapper.all();
    System.out.println(users);
}

测试service

//自定义方法
@Test
void all2(){
    List<User> users = userService.all();
    System.out.println(users);
}

1.5 代码生成器

引入依赖

<!-- mybatis plus -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.0</version>
</dependency>
<!-- mysql -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 代码生成器 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.4.0</version>
</dependency>
<!-- velocity引擎:Apache下生成代码引擎 -->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.2</version>
</dependency>
<!-- ehcache缓存:缓存查询到的数据 -->
<dependency>
    <groupId>org.mybatis.caches</groupId>
    <artifactId>mybatis-ehcache</artifactId>
    <version>1.2.1</version>
</dependency>

生成代码

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;

public class CodeGenerator {
    public static void main(String[] args) {
        //全局设置
        GlobalConfig globalConfig = new GlobalConfig();
        //生成的文件输出到哪个位置,存放到哪个文件夹
        globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
        globalConfig.setAuthor("xiangwei");     //作者
        globalConfig.setOpen(false);              //是否打开输出目录
        globalConfig.setFileOverride(true);     //反复生成时是否覆盖
        //设置service接口名字,%s为获取实体类名字,如果不设置Service
        //接口将以大写字母I开头
        globalConfig.setServiceName("%sService");
        globalConfig.setControllerName("%sController");//设置controller的名字
        globalConfig.setBaseColumnList(true);    //是否生成字段的SQL代码片段
        globalConfig.setEnableCache(true);        //是否开启二级缓存
        globalConfig.setBaseResultMap(true);    //是否生成基本的resultMap

        //设置数据源
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/plus?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC");
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("root");

        //配置策略
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setCapitalMode(true);        //全局大写命名
        strategyConfig.setEntityLombokModel(true);     //是否为lombok样式的entity
        strategyConfig.setTablePrefix(new String[]{"mall_"}); //忽略表前缀 类名相关 User
        //strategyConfig.setFieldPrefix(new String[]{""});//忽略字段前缀  属性相关

        //包名策略
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.woniuxy.mybatisplusgenerater")    //父包名
                .setController("controller")        //controller包名
                .setEntity("entity")                //entity包名
                .setMapper("mapper")                //mapper接口包名
                .setXml("mapper.xml")                //mapper.xml包名
                .setService("service")                //service包名
                .setServiceImpl("service.impl");    //service实现类包名

        //代码生成器
        AutoGenerator autoGenerator = new AutoGenerator();
        //生成器设置属性
        autoGenerator.setGlobalConfig(globalConfig);
        autoGenerator.setDataSource(dataSourceConfig);
        autoGenerator.setStrategy(strategyConfig);
        autoGenerator.setPackageInfo(packageConfig);

        //执行生成代码
        autoGenerator.execute();
    }
}

运行程序生成controller、service、mapper、entity及xml文件

在resource下创建mybatis文件夹,并添加mybatis-config.xml,创建mappers目录将刚才生成的所有xml文件移到该目录下

58 - mybatis plus、Linux - 图1

修改application.yml指定配置文件加载路径、数据库基本参数

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/plus?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
    username: root
    password: root
logging:
  level:
    root: info #logback全局默认日志级别
mybatis-plus:
  config-location: classpath:/mybatis/mybatis-config.xml #主配置文件
  mapper-locations: classpath:/mybatis/mappers/*.xml #mapper文件
  type-aliases-package: com.woniuxy.mybatisplusgenerater.entity  #别名

修改UserController添加方法用于测试

@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/all")
    @ResponseBody
    public List<User> all(){
        return userService.list();
    }
}

在UserMapper上添加对应注解

@Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {

}

在主启动类上开启mapper扫描

@SpringBootApplication
@MapperScan("com.woniuxy.mybatisplusgenerater.mapper")
public class MybatisPlusGeneraterApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisPlusGeneraterApplication.class, args);
    }

}

运行项目发送请求测试

二、Linux - 操作系统

基本操作指令

安装JDK、MySQL、Tomcat、项目部署、程序安装

常见操作系统

  • windows
  • Unix
  • Linux
  • Mac
  • Android
  • 塞班

Unix系统,现在大多数的操作都是基于Unix发展而来,windows核心就Unix,Linux借鉴了Unix思想发展而来

Linux分类

  • Redhat 20W
  • Ubuntu
  • centos

为啥要学Linux - 项目需要部署到Linux操作系统上

虚拟机:

  • 虚拟机软件:安装在windows,用来运行Linux操作系统
    • VMware
    • virtualbox
  • 操作系统:操作运行在虚拟机软件上

安装虚拟机软件及操作系统

坑1:VMware14版本的 电脑比较老 建议换12及以下的版本

坑2:在安装系统是可能会弹一个蓝色对话框 vmxxx ->百度 按照百度上步骤去修BIOS参数 重启