因为最近在做的这件事是以结果为导向的,所以用到的很多知识点都是知其然而不知其所以然,只是拿来用,不出错并且达到目的。毕竟真的是没有什么Java基础,所以细节处就不太追究了,打算先把东西做出来,再回头学习。
需要一个数据库的可视化工具,这里推荐 Navicat Premium ,同样需要破解,请自行百度。 然后根据自己的需求创建数据库,创建表。
我这里的需求是去请求一个三方的Open API ,请求拿到的都是封装好的数据,再加上本身数据库相关知识不是很扎实,所以我就先根据实际的业务数据的字段去建表了,通俗的说就是返回的数据有哪些字段,表里就添加哪些字段
数据库的命名规则,大概是小写加下划线吧(我猜的~),反正起啥名都行,主要是密码整对了就行
双击打开连接
新建数据库
新建表
因为都是比较简单的操作就不贴图了,需要注意字段类型和长度,string类型,数据库里对应选一个varchar吧;然后还有一个我遇到的问题 Incorrect column name ,就是字段名里后面可能手误加了个空格导致的,把空格删掉再保存就OK了
MyBatis是个啥呢,准确来说我也不知道是个啥,还是那句话我们是以结果为导向的,这个东西呢 或者说是个框架,是可以帮助我们连接本地数据库,然后插入数据的,下面的操作我们就要用他了。
下面我以本地建的一个简单的表为例,记录一下插入数据库的操作:
在pom.xml文件中加入spring和MyBatis的依赖,pom.xml中已经有一些依赖了,只要把下面这段代码加入dependencies中就可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
复制代码
添加完之后是下面这样的:
根据我们数据库中的表,创建出对应的实体类
package com.ucarinc.umeng.entity;
public class DateCountInfo {
private String date;
private Integer count;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
}
复制代码
这个在上一篇文章里面我们已经创建过了controller并注入了service,这里我们就对应上面的实体类,创建相应的service,里面方法就根据具体需求来写,无非就是数据库的增删改查的操作
public interface DateCountInfoService {
Boolean insertDateCountInfo(@Param("dateCountInfos") List<DateCountInfo> dateCountInfos);
List<DateCountInfo> selectDateCountInfo(@Param("date") String date);
}
复制代码
@Param这个注解,先这么写吧,后面要用的,或者先不用这个也可,就是起个名字
这里要注意命名,都是根据实体类来的,后面跟上Mapper
@Mapper
public interface DateCountInfoMapper {
int insertDateCountInfo(@Param("dateCountInfo") List<DateCountInfo> dateCountInfo);
List<DateCountInfo> selectDateCountInfo(@Param("date") String date);
}
复制代码
ServiceImpl看名字也可以知道就是service类的具体实现,还是需要注意一系列的注解
@Service
public class DateCountInfoServeImpl implements DateCountInfoService{
@Autowired
DateCountInfoMapper dateCountInfoMapper;
@Override
public Boolean insertDateCountInfo(List<DateCountInfo> dateCountInfos) {
try{
if(dateCountInfoMapper.insertDateCountInfo(dateCountInfos) > 0){
return true;
}else{
return false;
}
}catch (Exception e){
e.printStackTrace();
System.out.println("数据入库异常");
return false;
}
}
@Override
public List<DateCountInfo> selectDateCountInfo(String date) {
try{
List<DateCountInfo> dateCountInfos = dateCountInfoMapper.selectDateCountInfo(date);
if(dateCountInfos.size() > 0){
return dateCountInfos;
}else{
return null;
}
}catch (Exception e){
e.printStackTrace();
System.out.println("数据查找异常");
return null;
}
}
}
复制代码
<?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.example.dao.DateCountInfoMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.example.dao.entity.DateCountInfo" id="BaseResultMap">
<!-- <id column="id" property="id" jdbcType="VARCHAR"/>-->
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="count" property="count" jdbcType="INTEGER"/>
<result column="date" property="date" jdbcType="VARCHAR"/>
</resultMap>
<!-- resultMap都是查询结果使用 -->
<!-- 判断日期不用 is 用 = -->
<select id="selectDateCountInfo" resultMap="BaseResultMap" parameterType="java.lang.String">
select *
from DateCountInfo
where date = #{date}
</select>
<!-- 由外边进来的参数,只能自定义类型 -->
<insert id="insertDateCountInfo" parameterType="java.util.List">
insert into DateCountInfo (date, count ,name)
values
<foreach collection="dateCountInfo" item="event" separator=",">
(#{event.date,jdbcType=VARCHAR}, #{event.count,jdbcType=INTEGER}, #{event.name,jdbcType=VARCHAR}
)
</foreach>
</insert>
</mapper>
复制代码
namespace很重要,它是指定这个xml所对应的是哪个dao(mapper)接口
还是使用注解
@SpringBootApplication
@ComponentScan({"com.*"})
@MapperScan({"com.example.dao"})
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
复制代码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/my_test_sql_db?useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=round&nullCatalogMeansCurrent=true&allowMultiQueries=true spring.datasource.username=root spring.datasource.password=root mybatis.type-aliases-package=com.example.entity mybatis.mapperLocations=classpath:mapper/*.xml logging.level.root=info logging.level.com.example.*=debug 复制代码
controller中添加相关的测试代码,还是注入上面写好的service,然后路径,参数,直接调用service中的方法
数据库有时候会有点儿“卡”,可以刷新一下或者关闭再重新打开就会看到更新
最后再记录一下,自己犯的一个小错误,给数据库加主键或者是联合主键,因为测试了很多次插入数据库,所以重复数据很多,想到要去重,就想到了添加主键和联合主键。千万注意清空表中已有数据再去设置,否则表中已有重复数据,主键是设置不成功的~