简单搭建一个Spring boot,并通过MyBatis做数据库查询
工具: IDEA
数据库:MySQL
一、新建Spring boot项目
1.点击File——New——Project,做如下图操作后,点击next
2.会看到下面这个界面,做一下解释:
Group默认的com.example,就是项目中的结构,一般example会替换成公司名称
Artifact默认demo,这里可以用一个单词来概括你的项目
然后单击next
.
3.这里选择web,然后勾选上中间的web
4.输入项目名称,点击Finish
二、完善一下spring boot的结构
1.新建完项目,我们会得到一个简单的目录,需要说的是,这个项目的入口,就是在com.example.demo下的xxxxApplication,打开这个文件会发现主函数,由于spring boot里内置了Tomcat,所以启动项目时只需要在这里启动,端口号是8080。后面我们会再此提到这里,先往下看。
2.作为一个标准的web项目,controller、service、dao层是必备的,所以先建好这三个路径,例如我的路径(我建的项目名称与上述过程中默认的demo和example之类的字眼不一样):
global这个包下是一些全局的处理,本文不做解释,新建springboot项目时也不需要这个包中的代码。
注意dao下,我又新建了一个testDao,然后在dao.testDao下建的ITestDao,这里注意一下,一会儿会有说明。
三、具体代码说明
1.controller
下面是我TestController的代码:
@RestController
@RequestMapping(value = "/myspring",params = "aa=test")
public class TestController {
@RequestMapping(params={"bb=test_testController"})
public String test_testContoller(String id){
return testService.test(id);
}
@Autowired
ITestService testService;
}
需要在controller上加入注解@RestController和@RequestMapping,其中RequestMapping中的value是通过http请求访问的地址,params(包括方法上的RestMappting)是用来标识访问地址中的哪一个controller的哪一个方法。
这里是需要传入一个String类型的id,然后在调用Service层的方法去做查询。
ITestService是我Service层的某一个接口。
2.service
@Service
public class TestServiceImpl implements ITestService{
@Override
public String test(String id) {
return testDao.listById(id).get("name").toString();
}
@Autowired
ITestDao testDao;
}
ITestService是一个简单的接口,没有什么可说的,这里的TestServiceImpl实现了接口,并加入@Service注解,表示这是service。(在我以前搭建项目时曾省略service层,直接调用dao,然后就会报错,我也不知道为什么,望大佬指点)
这里的ITestDao是dao层的接口,加入@Autowired注解会报错,这里不用管它,这是IDEA的问题。
通过dao层的方法listById获得一个Map<String,Object>的返回值,然后返回其中key为"name"的值。
3.dao
public interface ITestDao {
public Map<String,Object> listById(@Param("id") String id);
}
这里dao只有接口,是因为我们用了MyBatis,以xml文件形式做查询,这里提前说明一下,@Param这个注解在参数只有一个的时候最好加上,参数大于等于2时则必须要加上。
三、MyBatis配置和使用
1.在pom.xml中导入mysql和mybatis的依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
<!-- Spring Boot Mybatis 依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.2.0</version>
</dependency>
2.配置
这里我在resources文件夹下新建了config文件用来保存项目中的各种配置,并把application.propertis文件也移动到了config下
(1)mapper文件夹是mybatis实现dao接口的xml文件,一会儿会做详细说明。
(2)application.properties是spring的配置文件,我们在这里面添加一句话
mybatis.mapperLocations=classpath*:config/mapper/*.xml
表示mapper的位置,是config下mapper中所有的xml文件,如果mapper下再分有多个文件夹,可以改成config/mapper/*/*.xml
(3)jdbc.properties是数据库配置文件,后边会做说明。
3.入口的配置
打开xxxxApplication(我这里是MySpringApplication),加入注解
@SpringBootApplication
@Configuration
@MapperScan("com.masart.demo.dao.*")
public class MySpringApplication {
main...
}
前两个注解是springboot必须要加上的,在这里就不做过多说明了
@MapperScan()中的位置是项目中调用mybatis xml文件的接口,也就是只有接口的dao层。需要注意的是这里并不是精确到了文件,而只是到了文件夹。在建立dao时我多建了一层,所以这里也就多了一个" * ",表示dao文件夹下的全部文件夹。这里很关键,一定要配对!
4.最最最最最关键的XML
我们用xml文件来实现dao的接口
<?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.masart.demo.dao.testDao.ITestDao">
<select id="listById" resultType="java.util.HashMap">
SELECT name from user where id = #{id}
</select>
</mapper>
namespace是当前xml要实现接口的位置和名称
select中的id要和接口中的方法名一致,且唯一
#{id}代表接口中的@Param注解的名为"id"的参数,#的方式已经预处理过了,${id}则表示直接将${id}替换为名为"id"的参数
同样的,还有<delete><insert><update>等标签
四、JDBC
到这里,整个的结构已经出来了,但是还不能运行,因为没有配置数据库和JDBC啊!
1.首先在mysql数据库中建一个表,数据库名为test,表名为user,表有两列,id 和name,id类型为int,name类型为varchar(10),id为主键。然后随便插入几条数据。
2.配置连接池
@Configuration
@ComponentScan
@PropertySource(value= {"classpath:config/jdbc.properties"})
public class JdbcConfig {
@Bean(name = "dataSource")
@Qualifier("dataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource druidDataSource() {
return new DruidDataSource();
}
}
这个方法我写在了global包下,根据自己的项目写在任意的位置即可。
@Configuration和@ComponentScan注解是必须的,@PropertiSource是jdbc配置文件的位置
这里用到了阿里的DruidDataSource配置连接池,非常好用,根据上面的写法照抄即可。
3.JDBC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://ip:port/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=root
如果这个不行就去百度一个吧。。注意修改 ip和port!!!!!
五、启动 测试
至此,整个的项目已经搭建完成,在入口启动main方法,浏览器输入地址http://localhost:8080/myspring?aa=test&bb=test_testController&id=1即可访问。为什么是这个地址?看看controller就明白了。