全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

基于spring boot 1.5.4 集成 jpa+hibernate+jdbcTemplate(详解)

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 


相关文章: Swift中循环语句中的转移语句 break 和 continue  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  如何在阿里云服务器自主搭建网站?  南京网站制作费用,南京远驱官方网站?  昆明网站制作哪家好,昆明公租房申请网上登录入口?  如何快速生成ASP一键建站模板并优化安全性?  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  如何选择建站程序?包含哪些必备功能与类型?  如何基于云服务器快速搭建网站及云盘系统?  如何在Windows虚拟主机上快速搭建网站?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  如何自定义建站之星模板颜色并下载新样式?  c++怎么用jemalloc c++替换默认内存分配器【性能】  ,在苏州找工作,上哪个网站比较好?  建站主机选虚拟主机还是云服务器更好?  网站代码制作软件有哪些,如何生成自己网站的代码?  Android自定义listview布局实现上拉加载下拉刷新功能  网站制作的步骤包括,正确网址格式怎么写?  大连网站设计制作招聘信息,大连投诉网站有哪些?  如何通过虚拟主机快速搭建个人网站?  定制建站流程步骤详解:一站式方案设计与开发指南  建站之星价格显示格式升级,你的预算足够吗?  网页设计与网站制作内容,怎样注册网站?  如何设计高效校园网站?  独立制作一个网站多少钱,建立网站需要花多少钱?  如何通过万网虚拟主机快速搭建网站?  如何在VPS电脑上快速搭建网站?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  如何在万网ECS上快速搭建专属网站?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  建站主机选购指南:核心配置与性价比推荐解析  如何选择高效便捷的WAP商城建站系统?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  如何快速搭建支持数据库操作的智能建站平台?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  建站之星×万网:智能建站系统+自助建站平台一键生成  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  建站主机是否等同于虚拟主机?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  长沙企业网站制作哪家好,长沙水业集团官方网站?  免费ppt制作网站,有没有值得推荐的免费PPT网站?  seo网站制作优化,网站SEO优化步骤有哪些?  建站之星展会模板:智能建站与自助搭建高效解决方案  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  如何在建站主机中优化服务器配置?  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  ,有什么在线背英语单词效率比较高的网站?  阿里云网站制作公司,阿里云快速搭建网站好用吗? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。