现在来介绍SpringBoot基于jpa对MySQL进行操作。 既然是数据库操作总有点目标和资源吧, 现在来做一个:《万界神兵录》收集一下天下神兵,从剑开始
一.前期准备
1.个人还是比较喜欢自己建表:建表
CREATE TABLE sword
(
id int PRIMARY KEY NOT NULL COMMENT '身份验证码' AUTO_INCREMENT,
name varchar(24) NOT NULL COMMENT '名称',
info text COMMENT '描述信息',
imgurl varchar(100) COMMENT '图片',
create_time datetime COMMENT '创建时间',
modify_time datetime COMMENT '修改时间',
origin varchar(40) COMMENT '来源'
);
2.一条数据:Excalibur
sql> INSERT INTO
`toly
`.`sword
` (
`name
`, `info
`, `imgurl
`, `create_time
`, `modify_time
`, `origin
`)
VALUES ('Excalibur', 'Excalibur是传说中不列颠国王亚瑟王从湖之仙女那得到的圣剑。此剑在是精灵在阿瓦隆(Avalon)所打造,
剑锷由黄金所铸、剑柄上镶有宝石,并因其锋刃削铁如泥',
'', '2018-07-16 05:30:15', '2018-07-16 05:30:20', '亚瑟王')
二.项目中:
1.添加依赖:toly01\pom.xml
<dependency>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-starter-data-jpa
</artifactId>
</dependency>
<dependency>
<groupId>mysql
</groupId>
<artifactId>mysql-connector-java
</artifactId>
</dependency>
2.数据库信息配置:src\main\resources\application-dev.yml
spring:
datasource:
driver-class-name:
com.mysql.jdbc.Driver #驱动类名--不变
url: jdbc:mysql:///toly
#数据库名称
username: root
#用户名
password: ******
#密码
jpa:
hibernate:
ddl-auto: none
#见下
show-sql: true
#控制台显示sql语句
jpa hibernate:启动时对表怎么操作:个人还是喜欢自己建表。
ddl-auto:
create(删除,创建)
ddl-auto:
update(第一次创建,之后更新)
ddl-auto:
create-drop(创建,程序停止后删除)
ddl-auto:
none(无操作)
3.新建javaBean类–toly1994.com.toly01.bean.Sword
注意:如果已经创建数据库,类名和表名统一。
@Entity
public class Sword {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private String info;
private String imgurl;
private Date create_time;
private Date modify_time;
private String origin;
}
4.建立仓储管理对象:toly1994.com.toly01.repository.SwordRepository
public interface SwordRepository extends JpaRepository<Sword, Integer> {
}
5.控制器:toly1994.com.toly01.controller.SwordController
查询操作
5-1-1.查询所有对象
@Autowired
private SwordRepository mSwordRepository;
/**
* @return json字符串显示
*/
@GetMapping(value =
"/swords/findAll")
public List<Sword>
findAllToJson() {
return mSwordRepository.findAll();
}
访问:http://localhost:8080/swords/findAll
5-1-2.根据id查询
/**
* @param id
* @return
*/
@GetMapping(value =
"/swords/find/{id}")
public Sword
find(@
PathVariable("id") Integer id) {
return mSwordRepository.findById(id).get();
}
访问:http://localhost:8080/swords/find/2
5-1-3.根据其他字段查询:以name为例
在仓储添加方法:toly1994.com.toly01.repository.SwordRepository
public List<Sword>
findByName(String name);
添加控制方法
/**
* @param name
* @return
*/
@GetMapping(value =
"/swords/findByName/{name}")
public List<Sword>
findByAtk(@
PathVariable("name") String name) {
return mSwordRepository.findByName(name);
}
访问:http://localhost:8080/swords/findByName/天生牙
插入操作:
在02篇讲述了传值的一些方式,这里也可用参数传值
/**
* 添加:返回插入对象的json字符串
*
* @return
*/
@GetMapping(value =
"/swords/insert")
public Sword
insert() {
Sword sword =
new Sword();
sword.setInfo(
"《犬夜叉》杀生丸配件,初时是一把不能杀此世之物的治愈之刀," +
"属于彼世之刀,是刀刀斋用犬大将(斗牙王)的獠牙所打造的剑," +
"可通过斩杀冥界的使者令死者复活。" +
"若是以真正的慈悲心使之发动,一挥刀能拯救百命");
sword.setName(
"天生牙");
sword.setOrigin(
"《犬夜叉》--杀生丸");
sword.setCreate_time(
new Date());
sword.setModify_time(
new Date());
return mSwordRepository.save(sword);
}
访问:localhost:8080/swords/insert
通过url传值构建对象
/**
* 添加:通过url传值构建对象
* @return
*/
@GetMapping(value =
"/swords/insert2")
public Sword
insert2(Sword sword) {
return mSwordRepository.save(sword);
}
访问:localhost:8080/swords/insert2?name=九虹&info=圣剑&origin=《幻将录》
更新操作:打错了一个字,来改改吧:配件==>配剑
@GetMapping(
value =
"/swords/updata/{id}")
public Sword
updata(Sword sword) {
return mSwordRepository.save(sword);
}
访问:http://localhost:8080/swords/updata/2?name=天生牙&info=《犬夜叉》杀生丸配件,初时是一把不能杀此世之物的治愈之刀, 属于彼世之刀,是刀刀斋用犬大将(斗牙王)的獠牙所打造的剑,可通过斩杀冥界的使者令死者复活。” 若是以真正的慈悲心使之发动,一挥刀能拯救百命
删除操作:
@GetMapping(
value =
"/swords/delete/{id}")
public void insert(@
PathVariable("id") Integer id) {
mSwordRepository.deleteById(id);
}
访问:http://localhost:8080/swords/delete/3
事务
1.Service:业务处理逻辑在Controller里写会让他太臃肿,最好写个服务类来写逻辑
新建服务类:toly1994.com.toly01.service.SwordService
@Service
public class SwordService {
@Autowired
private SwordRepository mSwordRepository;
public void insertTwo() {
Sword jie =
new Sword();
jie.setName(
"解剑");
jie.setInfo(
"幻将录--何解莲");
mSwordRepository.save(jie);
}
}
使用服务:top.toly.springboot.database.controlor.SwordController
@Autowired
private SwordService mSwordService;
/**
* 查询所有:返回json字符串
*
* @return
*/
@GetMapping(value =
"/swords/inset2")
@Transactional
public void inset2() {
mSwordService.insertTwo();
}
访问:http://localhost:8080/swords/insert_two
2.事务:同生共死
未开启事务时:
/**
* 作者:张风捷特烈
* 时间:2018/7/16:15:31
* 邮箱:1981462002@qq.com
* 说明:业务需求:解连双剑必须同时插入成功或失败
*/
@Service
public class SwordService {
@Autowired
private SwordRepository mSwordRepository;
public void insertTwo() {
Sword jie =
new Sword();
jie.setName(
"解剑");
jie.setInfo(
"幻将录--何解莲");
mSwordRepository.save(jie);
Sword lian =
new Sword();
lian.setName(
"连剑");
jie.setInfo(
"幻将录--何解莲" +
1 /
0);
mSwordRepository.save(lian);
}
}
访问:http://localhost:8080/swords/insert_two结果报错了,但解剑插入成功了
开启事务时:加个注解: @Transactional //org.springframework.transaction.annotation.Transactional
toly1994.com.toly01.service.SwordService
@Transactional
public void insertTwo() {
......
}
这样它们就同生共死了,注意,虽然失败了,但id还是增加了注:也可在top.toly.springboot.database.controlor.SwordController调用的方法上加注解
转载于:https://www.cnblogs.com/toly-top/p/9781988.html
相关资源:JAVA上百实例源码以及开源项目