使用IDEA或者是官网下载的方式,生成Spring Boot项目,pom.xml中加入相关的依赖,一般使用IDEA构建Spring Boot时可以勾选相关依赖的
第一步:
先把数据库地址配置完成,在
application.properties这个文件里
#JPA配置
spring.jpa.show-sql=true
#JPA自动创建配置
spring.jpa.hibernate.ddl-auto=update
#数据库连接池配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#?后面createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true是自动创建数据库
spring.datasource.url=jdbc:
mysql://localhost:3306/test?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
#Spring Boot内置tomcat端口地址,可改
server.port=8888
#Mybatis XML映射地址配置
mybatis.mapper-locations=classpath:mybatis/*.xml
第二步:
创建实体类,映射数据库中的某张表,这里我推荐混合JPA的自动创表,这样就不需要要去数据库中对字段了,连表都不用自己建,JPA帮你建好,只需要打上JPA的注解,配合配置中的自动创数据库这样就省去了先新建数据库再新建表再创建实体类一一对应,个人觉得不错的自动生成,方便。
/**
* 实体类
* @Entity 是JPA的注解 不需要手动去数据库创表
* 标上这个注解即可自动进入数据库根据属性自动创建表名称以及字段
*/
@Entity
public class User {
/**
* @Id JPA注解 标注ID
* @GeneratedValue JPA注解 用于ID自增
*/
@Id
@GeneratedValue
private Integer id;
private String name;
private String sex;
public User() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
第三步:
创建XMLSQL语句,这个XML命名要和实体类名字相同,等于是UserMapper.xml,这样可以少去很多不知名BUG,路径要和在
application.properties
配置中映射的路径一样,XML中namespare标签对应的路径是要映射的Mapper接口
<?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.demo.mapper.UserMapper">
<select id="findByAll" resultType="com.example.demo.domain.User">
SELECT * FROM user
</select>
<update id="findByUpdate" parameterType="com.example.demo.domain.User">
UPDATE user SET name = #{name},sex = #{sex},updatetime = #{updatetime} WHERE id=#{id}
</update>
<insert id="findByInsert" parameterType="com.example.demo.domain.User">
INSERT INTO user(name,sex,createtime) VALUES(#{name},#{sex},#{createtime})
</insert>
<delete id="findByDelete" parameterType="java.lang.Integer">
DELETE FROM user WHERE id=#{id}
</delete>
</mapper>
创建Mapper接口,加上@Mapper注解,映射XML语句,Mybatis有两种SQL写法,一种是XML映射,一种是注解的方式,推荐用XML映射,因为XML可以动态SQL语句,例如 "if","where"标签
/**
* @Mapper 注解是Mybatis中的坏境 等价MVC的DAO层配置 且自动配置
*/
@Mapper
public interface UserMapper {
/**
* Mybatis注解方式
* @return
*/
@Select("SELECT * FROM user")
List<User> findAll();
/**
* Mybatis注解方式
* @return
*/
@Insert("INSERT INTO user(name,sex,createtime) VALUES(#{name},#{sex},#{createtime})")
void insert(User user);
/**
* Mybatis注解方式
* @return
*/
@Update("UPDATE user SET name = #{name},sex = #{sex},updatetime = #{updatetime} WHERE id=#{id}")
void update(User user);
/**
* Mybatis注解方式
* @return
*/
@Delete("DELETE FROM user WHERE id=#{id}")
void delect(Integer id);
/**
* Mybatis XML映射方法
* @return
*/
List<User> findByAll();
/**
* Mybatis XML映射方法
* @return
*/
void findByInsert(User user);
/**
* Mybatis XML映射方法
* @return
*/
void findByUpdate(User user);
/**
* Mybatis XML映射方法
* @return
*/
void findByDelete(Integer id);
}
第四步:
创建Service接口以及实现类,在实现类加上
@Service
,
进行业务逻辑的处理,若要使用Mapper,需要加上
@Autowired
注解来配置bean
public interface UserService {
/**
* 以下是Mybatis注解方法
* @return
*/
List<User> findAll();
void insert(User user);
void update(User user);
void delect(Integer id);
/**
* 以下是Mybatis XML映射方法
* @return
*/
List<User> findByAll();
void findByInsert(User user);
void findByUpdate(User user);
void findByDelete(Integer id);
}
@Service
public class UserServiceImpl implements UserService{
/**
* @Autowired 注解自动配置bean
*/
@Autowired
private UserMapper userMapper;
@Override
public List<User> findAll() {
return userMapper.findAll();
}
@Override
public void insert(User user) {
userMapper.insert(user);
}
@Override
public void update(User user) {
userMapper.update(user);
}
@Override
public void delect(Integer id) {
userMapper.delect(id);
}
@Override
public List<User> findByAll() {
return userMapper.findByAll();
}
@Override
public void findByInsert(User user) {
userMapper.findByInsert(user);
}
@Override
public void findByUpdate(User user) {
userMapper.findByUpdate(user);
}
@Override
public void findByDelete(Integer id) {
userMapper.findByDelete(id);
}
}
第五步:
创建Controller控制器,开放接口,调用业务处理,返回结果
/**
* @RestController Spring Boot 把Controller,ResponseBody结合一起 形成了@RestController
*/
@RestController
public class UserController {
/**
* @Autowired 自动配置bean
*/
@Autowired
private UserService service;
@Autowired
private UserRepository repository;
/**
* @return
* @GetMapping @PostMapping 对应网络请求模式 还有#DeleteMapping @Putmapping等
* 括号中的"/"是对应url请求路径 等同于 localhost:8888/list即可访问 这是与前端对接的接口
*/
@GetMapping("/list")
public Object getAll() {
List<User> list = service.findAll();
if (list == null || list.size() == 0) {
return "暂无数据";
} else {
return list;
}
}
@PostMapping("/add")
public Object insert(User user) {
if (user == null) {
return "新增用户失败";
} else {
service.insert(user);
return "用户信息如下:\n" + user;
}
}
@PostMapping("/update")
public Object update(User user) {
if (user == null) {
return "更新失败";
} else {
service.update(user);
return "成功更新ID为:" + user.getId() + "的用户信息:\n" + user;
}
}
@PostMapping("/delete")
public String delete(Integer id) {
service.delect(id);
return "成功删除ID:" + id + "的用户";
}
/*--------------------------以上是Mybatis注解的接口--------分割线-----------------------------------*/
@GetMapping("/findByAll")
public Object findByAll() {
List<User> list = service.findByAll();
if (list == null || list.size() == 0) {
return "暂无数据";
} else {
return list;
}
}
@PostMapping("/findByInsert")
public Object findByInsert(User user) {
if (user == null) {
return "新增用户失败";
} else {
service.findByInsert(user);
return "用户信息如下:\n" + user;
}
}
@PostMapping("/findByUpdate")
public Object findByUpdate(User user) {
if (user == null) {
return "暂无数据";
} else {
service.findByUpdate(user);
return "成功更新ID为:" + user.getId() + "的用户信息:\n" + user;
}
}
@PostMapping("/findByDelete")
public String findByDelete(Integer id) {
service.findByDelete(id);
return "成功删除ID:" + id + "的用户";
}
}
大致的流程就是这样子的,业务处理层调用Mapper,Controller调用Service,遵循Spring的规范
顺便讲一下JPA的操作
第一步:
创建一个接口,继承
JpaRepository
public interface UserRepository extends JpaRepository<User,Integer> {
/*JPA使用方式 继承JpaRepository 泛型中第一个是实体类 第二个是主键类型*/
/*JPA这个接口已经把增删改查等工作做完 直接使用即可*/
}
第二步:
创建Service接口以及实现类,加上
@Autowired
调用新建的接口实现操作,再控制层中@Autowired 调用Service ,流程是一样的就不重复写了
@GetMapping("/jpaAll")
public Object jpaAll() {
List<User> list = repository.findAll();
if (list == null || list.size() == 0) {
return "暂无数据";
} else {
return list;
}
}
@PostMapping("/jpaInsert")
public Object jpaInsert(User user) {
if (user == null) {
return "新增用户失败";
} else {
repository.save(user);
return "用户信息如下:\n" + user;
}
}
@PostMapping("/jpaUpdate")
public Object jpaUpdate(User user) {
if (user == null) {
return "用户更新失败";
} else {
repository.save(user);
return "成功更新ID为:" + user.getId() + "的用户信息:\n" + user;
}
}
@PostMapping("/jpaDelete")
public String jpaDelete(Integer id) {
repository.delete(id);
return "成功删除ID:" + id + "的用户";
}