1.pom添加依赖
<!-- spring data jpa,会注入tomcat jdbc pool/hibernate等 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.42</version>
</dependency>
2.添加数据源配置(DataSource啥的,一系列对象spring boot 都会给你注入的,配置配置即可!)
spring.datasource.url=jdbc:mysql://localhost/test?characterEncoding=utf8&useSSL=true spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver #database pool config # Number of ms to wait before throwing an exception if no connection is available. spring.datasource.tomcat.max-wait=10000 # Maximum number of active connections that can be allocated from this pool at the same time. spring.datasource.tomcat.max-active=300 # Validate the connection before borrowing it from the pool. spring.datasource.tomcat.test-on-borrow=true # initial pool size spring.datasource.tomcat.initial-size=20 #=====================jpa config================================ #实体类维护数据库表结构的具体行为:update/create/create-drop/validate/none spring.jpa.hibernate.ddl-auto=none #打印sql语句 spring.jpa.show-sql=true #格式化输出的json字符串 spring.jackson.serialization.indent_output=true
3.新建实体
@Entity
@Table(name="user")
public class User {
@Id
@Column(name="id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name="number")
private String number;
@Column(name="name")
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
4.dao层
public interface UserDao{
User getById(int id);
User getByNumber(String number);
int addUser(User user);
void deleteUserById(int id);
User updateUser(User user);
}
@Repository
public class UserDaoImpl implements UserDao {
@PersistenceContext
private EntityManager entityManager;
@Override
public User getById(int id) {
//find by primary key
return this.entityManager.find(User.class,id);
}
@Override
public User getByNumber(String number) {
Query query = this.entityManager.createQuery("from User u where u.number=:number",User.class);
query.setParameter("number",number);
User user = (User)query.getSingleResult();
return user;
}
@Override
public int addUser(User user) {
this.entityManager.persist(user);
//print the id
System.out.println(user.getId());
return user.getId();
}
@Override
public void deleteUserById(int id) {
User user = this.entityManager.find(User.class,id); //关联到记录,方可删除
this.entityManager.remove(user);
}
@Override
public User updateUser(User user) {
User userNew = this.entityManager.merge(user);
return userNew;
}
}
5.service层
public interface UserService {
User getById(int id);
User getByNumber(String number);
int addUser(User user,boolean throwEx);
void deleteUserById(int id);
User updateUser(User user);
}
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
@Transactional(readOnly = true)
public User getById(int id) {
return userDao.getById(id);
}
@Override
@Transactional(readOnly = true)
public User getByNumber(String number) {
return userDao.getByNumber(number);
}
@Override
public int addUser(User user,boolean throwEx) {
int id= this.userDao.addUser(user);
if(throwEx){
throw new RuntimeException("throw a ex");
}
return id;
}
@Override
public void deleteUserById(int id) {
this.userDao.deleteUserById(id);
}
@Override
public User updateUser(User user) {
return this.userDao.updateUser(user);
}
}
6.controller层
@Controller("user1")
@RequestMapping("/jpa/user")
public class UserController {
/**
* 日志(slf4j->logback)
*/
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
@Autowired
private UserService userService;
/**
* 返回text格式数据
* @param id 主键id
* @return 用户json字符串
*/
@RequestMapping("/get/id/{id}")
@ResponseBody
public String getUserById(@PathVariable("id")String id){
logger.info("request /user/get/id/{id}, parameter is "+id);
User user = userService.getById(Integer.parseInt(id));
return JSONObject.toJSONString(user);
}
/**
* 返回json格式数据
* @param number 编号
* @return 用户
*/
@RequestMapping("/get/number/{number}")
@ResponseBody
public User getUserByNumber(@PathVariable("number")String number){
User user = userService.getByNumber(number);
return user;
}
@RequestMapping("/add/{number}/{name}")
@ResponseBody
public String addUser(@PathVariable("number")String number,@PathVariable("name")String name,boolean throwEx){
User user = new User();
user.setNumber(number);
user.setName(name);
int id = -1;
try{
id = userService.addUser(user,throwEx);
}catch (RuntimeException ex){
System.out.println(ex.getMessage());
}
return String.valueOf(id);
}
@RequestMapping("/delete/{id}")
@ResponseBody
public void getUserById(@PathVariable("id")int id){
this.userService.deleteUserById(id);
}
@RequestMapping("/update/{id}/{number}/{name}")
@ResponseBody
public User addUser(@PathVariable("id")int id, @PathVariable("number")String number, @PathVariable("name")String name){
User user = new User();
user.setId(id);
user.setNumber(number);
user.setName(name);
return userService.updateUser(user);
}
}
7. spring data jpa新使用方式,更高级
1.dao
@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
/**
* spring data jpa 会自动注入实现(根据方法命名规范)
* @return
*/
User findByNumber(String number);
@Modifying
@Query("delete from User u where u.id = :id")
void deleteUser(@Param("id")int id);
}
2.service
public interface UserService {
User findById(int id);
User findByNumber(String number);
List<User> findAllUserByPage(int page,int size);
User updateUser(User user,boolean throwEx);
void deleteUser(int id);
}
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public User findById(int id) {
return this.userRepository.findOne(id);
}
@Override
public User findByNumber(String number) {
return this.userRepository.findByNumber(number);
}
@Override
public List<User> findAllUserByPage(int page,int size) {
Pageable pageable = new PageRequest(page, size);
Page<User> users = this.userRepository.findAll(pageable);
return users.getContent();
}
@Override
public User updateUser(User user,boolean throwEx) {
User userNew = this.userRepository.save(user);
if(throwEx){
throw new RuntimeException("throw a ex");
}
return userNew;
}
@Override
public void deleteUser(int id) {
this.userRepository.deleteUser(id);
}
}
3.controller
@Controller("user2")
@RequestMapping("/datajpa/user")
public class UserController {
/**
* 日志(slf4j->logback)
*/
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
@Autowired
private UserService userService;
/**
* 返回text格式数据
* @param id 主键id
* @return 用户json字符串
*/
@RequestMapping("/get/id/{id}")
@ResponseBody
public String getUserById(@PathVariable("id")String id){
logger.info("request /user/get/id/{id}, parameter is "+id);
User user = userService.findById(Integer.parseInt(id));
return JSONObject.toJSONString(user);
}
/**
* 返回json格式数据
* @param number 编号
* @return 用户
*/
@RequestMapping("/get/number/{number}")
@ResponseBody
public User getUserByNumber(@PathVariable("number")String number){
User user = userService.findByNumber(number);
return user;
}
@RequestMapping("/get/all/{page}/{size}")
@ResponseBody
public List<User> getAllUserByPage(@PathVariable("page")int page,@PathVariable("size")int size){
return this.userService.findAllUserByPage(page,size);
}
@RequestMapping("/update/{id}/{number}/{name}")
@ResponseBody
public User addUser(@PathVariable("id")int id, @PathVariable("number")String number, @PathVariable("name")String name,boolean throwEx){
User user = new User();
user.setId(id);
user.setNumber(number);
user.setName(name);
User userNew = null;
try{
userService.updateUser(user,throwEx);
}catch (RuntimeException ex){
System.out.println(ex.getMessage());
}
return userNew;
}
@RequestMapping("/delete/{id}")
@ResponseBody
public void getUserById(@PathVariable("id")int id){
this.userService.deleteUser(id);
}
}
8.注入jdbcTemplate和transactionTemplate,使用传统方式操作数据库,更加灵活,方法如下
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private TransactionTemplate transactionTemplate;
/**
* 手动控制事物测试
* @param throwEx
*/
@Override
public void testTransactionManually(boolean throwEx) {
try {
transactionTemplate.execute(new TransactionCallback<Boolean>() {
/**
* 事物代码
*
* @param transactionStatus 事物状态
* @return 是否成功
*/
@Override
public Boolean doInTransaction(TransactionStatus transactionStatus) {
User user = new User();
user.setId(1);
int a = new Random().nextInt(10); //0-9
user.setNumber("10000u" + a);
jdbcTemplate.update("UPDATE USER SET NUMBER=? WHERE ID=?", new Object[]{user.getNumber(), user.getId()}, new int[]{Types.VARCHAR, Types.INTEGER});
if (throwEx) {
throw new RuntimeException("try throw exception"); //看看会不会回滚
}
return true;
}
});
}catch (RuntimeException ex){
System.out.println(ex.getMessage());
}
}
/**
* 手动执行jdbc测试
*/
@Override
public void testJdbcTemplate() {
User user = new User();
int a = new Random().nextInt(10); //0-9
user.setNumber("10000i"+ a );
user.setName("name"+a);
this.jdbcTemplate.update("INSERT into USER(NUMBER,NAME )VALUES (?,?)",user.getNumber(),user.getName());
}
至此,我已经讲了三种方式(jpa两种+jdbcTemplate)如何操作数据库了,你爱怎么用就怎么用,上述代码均是实践证明可行的!
以上这篇基于spring boot 1.5.4 集成 jpa+hibernate+jdbcTemplate(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# spring
# boot
# 集成jpa
# SpringBoot 2.0 整合sharding-jdbc中间件实现数据分库分表
# 详解Spring Boot中整合Sharding-JDBC读写分离示例
# SpringBoot JdbcTemplate批量操作的示例代码
# spring boot使用sharding jdbc的配置方式
# Spring Boot JDBC 连接数据库示例
# 关于Spring Boot对jdbc的支持问题
# 给大家
# 主键
# 给你
# 两种
# 会不会
# 希望能
# 三种
# 这篇
# 讲了
# 你爱
# 小编
# 大家多多
# 方法如下
# 我已经
# 实体类
# auto
# show
# sql
# drop
# validate
相关文章:
微信小程序 五星评分(包括半颗星评分)实例代码
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
网页设计与网站制作内容,怎样注册网站?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
如何做静态网页,sublimetext3.0制作静态网页?
如何在服务器上三步完成建站并提升流量?
如何用PHP快速搭建CMS系统?
制作网站的模板软件,网站怎么建设?
如何快速搭建高效简练网站?
建站之星好吗?新手能否轻松上手建站?
存储型VPS适合搭建中小型网站吗?
网站图片在线制作软件,怎么在图片上做链接?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
如何挑选最适合建站的高性能VPS主机?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何在万网开始建站?分步指南解析
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
如何快速打造个性化非模板自助建站?
制作电商网页,电商供应链怎么做?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
深入理解Android中的xmlns:tools属性
c# Task.ConfigureAwait(true) 在什么场景下是必须的
如何通过免费商城建站系统源码自定义网站主题与功能?
如何在自有机房高效搭建专业网站?
如何在建站主机中优化服务器配置?
建站之星如何修改网站生成路径?
三星网站视频制作教程下载,三星w23网页如何全屏?
大连 网站制作,大连天途有线官网?
建站之星图片链接生成指南:自助建站与智能设计教程
成都响应式网站开发,dw怎么把手机适应页面变成网页?
C#如何序列化对象为XML XmlSerializer用法
定制建站如何定义?其核心优势是什么?
高防服务器租用首荐平台,企业级优惠套餐快速部署
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
建站之星多图banner生成与模板自定义指南
定制建站哪家更专业可靠?推荐榜单揭晓
建站主机无法访问?如何排查域名与服务器问题
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
动图在线制作网站有哪些,滑动动图图集怎么做?
C#怎么创建控制台应用 C# Console App项目创建方法
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
制作证书网站有哪些,全国城建培训中心证书查询官网?
如何选择高效便捷的WAP商城建站系统?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
Python如何创建带属性的XML节点
成都网站制作报价公司,成都工业用气开户费用?
*请认真填写需求信息,我们会在24小时内与您取得联系。