这几天研究springboot和mybatis,正好手里边有个原来做过的javaweb项目,就直接拿过来整合了起来。这里前台用vue.js实现的代码就不分享了,前后端分离么,不影响看后边。想看整套源码可以到文章末尾去拿。
自动忽略那几个字。。。实在是想不起什么歌名了。。。
首先pom.xml
<dependencies> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-webartifactId> dependency> <dependency> <groupId>org.mybatis.spring.bootgroupId> <artifactId>mybatis-spring-boot-starterartifactId> <version>1.3.2version> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-devtoolsartifactId> <scope>runtimescope> dependency> <dependency> <groupId>org.projectlombokgroupId> <artifactId>lombokartifactId> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-testartifactId> <scope>testscope> dependency> <dependency> <groupId>mysqlgroupId> <artifactId>mysql-connector-javaartifactId> dependency> <dependency> <groupId>com.alibabagroupId> <artifactId>druidartifactId> <version>1.1.9version> dependency> <dependency> <groupId>com.alibabagroupId> <artifactId>fastjsonartifactId> <version>1.2.15version> dependency> dependencies>
项目结构图
有两个配置文件,也可以放到一起,当时因为整两套数据源老出错,就把它们分开了
这个config目录下的配置
server.port=8088 server.servlet.context-path=/music spring.devtools.restart.enabled=true spring.devtools.restart.additional-paths=src/main/java spring.devtools.restart.additional-exclude=static
这是classpath:下的
musicweb.datasource.url=jdbc:mysql://localhost:3306/musicweb?useSSL=false&characterEncoding=utf8 musicweb.datasource.username=root musicweb.datasource.password=leishao musicweb.datasource.driverClassName=com.mysql.jdbc.Driver musictop.datasource.url=jdbc:mysql://localhost:3306/musictop?useSSL=false&characterEncoding=utf8 musictop.datasource.username=root musictop.datasource.password=leishao musictop.datasource.driverClassName=com.mysql.jdbc.Driver
关于DataSource和SqlSessionFactory在config目录下
下边是musictop数据源和它的SqlSessionFactory配置类
@Configuration public class MusictopDataSource { @Value("${musictop.datasource.url}") private String url; @Value("${musictop.datasource.username}") private String user; @Value("${musictop.datasource.password}") private String password; @Value("${musictop.datasource.driverClassName}") private String driverClass; @Bean(name="musictop") @Qualifier("musictop") public DataSource dataSource(){ DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(driverClass); dataSource.setUrl(url); dataSource.setUsername(user); dataSource.setPassword(password); return dataSource; } @Bean(name = "musictopTransactionManager") public DataSourceTransactionManager musictopTransactionManager() { return new DataSourceTransactionManager(dataSource()); } }
@Configuration @MapperScan(basePackages = MusictopSessionFactory.PACKAGE,sqlSessionFactoryRef = "musictopSqlSessionFactory") @ToString public class MusictopSessionFactory { // 精确到 musictop 目录,以便跟其他数据源隔离 static final String PACKAGE = "com.lei.music.dao.musictop"; static final String MAPPER_LOCATION = "classpath:mapper/musictop/*.xml"; @Bean(name = "musictopSqlSessionFactory") public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("musictop") DataSource musictopDataSource) throws Exception { final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(musictopDataSource); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources(MusictopSessionFactory.MAPPER_LOCATION)); return sessionFactory.getObject(); } }
下边是musicweb的DataSource和SqlSeessionFactory的配置
@Configuration public class MusicwebDataSource { @Value("${musicweb.datasource.url}") private String url; @Value("${musicweb.datasource.username}") private String user; @Value("${musicweb.datasource.password}") private String password; @Value("${musicweb.datasource.driverClassName}") private String driverClass; @Bean(name="musicweb") @Primary @Qualifier("musicweb") public DataSource dataSource(){ DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(driverClass); dataSource.setUrl(url); dataSource.setUsername(user); dataSource.setPassword(password); return dataSource; } @Bean(name = "musicwebTransactionManager") @Primary public DataSourceTransactionManager musictwebTransactionManager() { return new DataSourceTransactionManager(dataSource()); } }
@Configuration //扫描Mapper接口并容器管理 @MapperScan(basePackages = MusicwebSessionFactory.PACKAGE,sqlSessionFactoryRef = "musicwebSqlSessionFactory") @ToString public class MusicwebSessionFactory { static final String PACKAGE = "com.lei.music.dao.musicweb"; static final String MAPPER_LOCATION = "classpath:mapper/musicweb/*.xml"; @Bean(name = "musicwebSqlSessionFactory") @Primary public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("musicweb") DataSource musicwebDataSource) throws Exception { final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(musicwebDataSource); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources(MusicwebSessionFactory.MAPPER_LOCATION)); return sessionFactory.getObject(); } }
接下来就是设置跨域请求
@Configuration public class WebMvcConfig implements WebMvcConfigurer { //跨域请求 @Override public void addCorsMappings(CorsRegistry registry) { //设置允许跨域的路径 registry.addMapping("/**") //设置允许跨域请求的域名 .allowedOrigins("*") //是否允许证书 不再默认开启 .allowCredentials(true) //设置允许的方法 .allowedMethods("GET", "POST", "DELETE", "PUT") //跨域允许的时间 .maxAge(3600); } }
到了这一步,基本的配置就完毕了。其实之后的代码基本就是,完成一个,复制粘贴,没什么难度。我这里就展示一下其中的一个实现。
首先。entity下有两个目录,分别对应两个数据库中的表。简单点先看看musicweb下的member类
@Data public class memBer { private Integer id; private String username; private String name; private String pwd; private String email; private String tel; private String date; }
之后到DAO的musicweb目录下看与member对应的UserDao
public interface UserDao { ListqueryMembers(); int saveMember(memBer member); int updateMember(memBer member); int removeMember(Integer id); }
完后再resource的mapper目录下建立与UserDao对应的UserMapper文件
xml version="1.0" encoding="UTF-8" ?> mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.lei.music.dao.musicweb.UserDao"> <resultMap id="BaseResultMap" type="com.lei.music.entity.musicweb.memBer"> <id column="id" property="id" jdbcType="BIGINT"/> <result column="username" property="username" jdbcType="VARCHAR"/> <result column="name" property="name" jdbcType="VARCHAR"/> <result column="pwd" property="pwd" jdbcType="VARCHAR"/> <result column="email" property="email" jdbcType="VARCHAR"/> <result column="tel" property="tel" jdbcType="VARCHAR"/> <result column="date" property="date" jdbcType="VARCHAR"/> resultMap> <sql id="Base_Column_List"> id,username,name,pwd,email,tel,date sql> <select id="queryMembers" resultMap="BaseResultMap"> select <include refid="Base_Column_List"/> from member select> <insert id="saveMember" useGeneratedKeys="true" keyProperty="id" keyColumn="id" parameterType="com.lei.music.entity.musicweb.memBer"> insert into member(username,name,pwd,email,tel,date) values (#{username},#{name},#{pwd},#{email},#{tel},#{date}) insert> <delete id="removeMember" parameterType="Integer"> delete from member where id=#{id} delete> <update id="updateMember" parameterType="com.lei.music.entity.musicweb.memBer"> update member set username=#{username},name=#{name},pwd=#{pwd},email=#{email},tel=#{tel},date=#{date} where id=#{id} update> mapper>
到这流程就差不多了。
源码地址:https://download.csdn.net/download/weixin_41228362/10503975