springboot+mybatis框架demo

最近学习了springboot+mybatis写一个小demo来整合一下学习的内容

第一步当然是创建项目了。我们此次使用的编辑器Intellij idea,使用spring+mybatis框架,使用maven管理我们的项目

基本的配置文件

server.port=8080
server.servlet.context-path=/yiban
#访问端口

#数据库配置
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/yiban?serverTimezone=UTC&zeroDateTimeBehavior=convertToNull
jdbc.username=root
jdbc.password=

mybatis_config_file=mybatis-config.xml
mapper_path=/mapper/**.xml
type_alias_package=com.you.yiban.entity

因为我们是使用的是mybaits对mysql数据库进行操作,所以需要配置相应的beans和创建会话工厂代码如下

@MapperScan("com.you.yiban.dao")
public class DataSourceConfiguration {
    @Value("${jdbc.driver}")
    private String jdbcDriver;
    @Value("${jdbc.url}")
    private String jdbcUrl;
    @Value("${jdbc.username}")
    private String jdbcUsername;
    @Value("${jdbc.password}")
    private String jdbcPassword;

    /**
     * 生成与spring-dao.xml对应的bean dataSource
     *
     * @return
     * @throws PropertyVetoException
     */
    @Bean(name = "dataSource")
    public ComboPooledDataSource createDataSource() throws PropertyVetoException {
        // 生成datasource实例
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        // 跟配置文件一样设置以下信息
        // 驱动
        dataSource.setDriverClass(jdbcDriver);
        // 数据库连接URL
        dataSource.setJdbcUrl(jdbcUrl);
        // 设置用户名
        dataSource.setUser(jdbcUsername);
        // 设置用户密码
        dataSource.setPassword(jdbcPassword);
        // 配置c3p0连接池的私有属性
        // 连接池最大线程数
        dataSource.setMaxPoolSize(30);
        // 连接池最小线程数
        dataSource.setMinPoolSize(10);
        // 关闭连接后不自动commit
        dataSource.setAutoCommitOnClose(false);
        // 连接超时时间
        dataSource.setCheckoutTimeout(10000);
        // 连接失败重试次数
        dataSource.setAcquireRetryAttempts(2);
        return dataSource;
    }
}

会话工厂

@Configuration
public class SessionFactoryConfiguration {
    // mybatis-config.xml配置文件的路径
    private static String mybatisConfigFile;

    @Value("${mybatis_config_file}")
    public void setMybatisConfigFile(String mybatisConfigFile) {
        SessionFactoryConfiguration.mybatisConfigFile = mybatisConfigFile;
    }

    // mybatis mapper文件所在路径
    private static String mapperPath;

    @Value("${mapper_path}")
    public void setMapperPath(String mapperPath) {
        SessionFactoryConfiguration.mapperPath = mapperPath;
    }

    // 实体类所在的package
    @Value("${type_alias_package}")
    private String typeAliasPackage;

    @Autowired
    private DataSource dataSource;

    /**
     * 创建sqlSessionFactoryBean 实例 并且设置configtion 设置mapper 映射路径 设置datasource数据源
     *
     * @return
     * @throws IOException
     */
    @Bean(name = "sqlSessionFactory")
    public SqlSessionFactoryBean createSqlSessionFactoryBean() throws IOException {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        // 设置mybatis configuration 扫描路径
        sqlSessionFactoryBean.setConfigLocation(new ClassPathResource(mybatisConfigFile));
        // 添加mapper 扫描路径
        PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
        String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + mapperPath;
        sqlSessionFactoryBean.setMapperLocations(pathMatchingResourcePatternResolver.getResources(packageSearchPath));
        // 设置dataSource
        sqlSessionFactoryBean.setDataSource(dataSource);
        // 设置typeAlias 包扫描路径
        sqlSessionFactoryBean.setTypeAliasesPackage(typeAliasPackage);
        return sqlSessionFactoryBean;
    }
}

当然springboot框架可以不用写beans和会话工厂,只需要在yml文件中把相应的配置文件写好就是了,框架已经给你封装好了,具体写法会在下一篇博客中详写。


配置好这些之后我们就可以开始内容的填写了。我们可以写一个简单的用户登录的小demo。springboot+mybatis框架其实就是ssm框架的升级版本,一个完整的项目也是由controller层,service层和dao层组成的。要完成用户登录demo首先在dao层写我们需要的接口,由于这只是一个小demo我们写一个简单的接口就够了

public interface UserDao {
    /**
     * 按id查找用户信息
     * @param username
     * @return
     */
    User queryByUsername(String username);
}

当然在这之前我已经创建好了一个user的实体类包含用户名和密码,注意要生成对应的getter和setter和tostring方法,这个idea有快捷键,可以自行选择生成。
之后我们需要写mapper文件
在这里插入图片描述
需要注意的是id需要和dao层的接口名相对应,这里因为我们需要的查出一个用户,所以返回类型我们返回自己创建的user类,如果以后有更复杂的返回类型,就需要写resultMap了。
在service层我们一般也是写一个接口然后再Impl类中写具体方法在这里插入图片描述
在这里插入图片描述
我们再Impl类中使用@Autowired注解注入了我们之前写的userDao,我们就可以调用其中的方法了,我们把收到的用户名和密码和数据库中查到的密码相比较,判断是否合法登录。
最后便是controller层

@CrossOrigin
@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/login", method = RequestMethod.GET)
    @ResponseBody
    public ResultVo checkLogin(String username, String password) {
        // 用户登录
        User user = userService.checkLogin(username, password);
        if (user != null) {
           user.setPassword(null);
            return ResultUtil.success(user);
        } else {
            return ResultUtil.error("用户名或密码错误");
        }
    }

其中的@CrossOrigin注解是用来解决前后端联调的跨域问题, @RequestMapping注解vaule后面的值是前端或者用postman访问时的地址,method = RequestMethod.GET是访问的方法,当然我们一般直接用@GetMapping也是一样的。在返回的时候我们一般不直接返回string或是其他的基本类型,我们自定义了一个ResultVo类来接受返回类型,可以返回状态码,提示信息和具体数据。这样我们一个简单的登录小demo就完成了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值