最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot中利用MyBatis進(jìn)行數(shù)據(jù)操作的示例

 更新時(shí)間:2018年09月21日 09:17:33   作者:gyl_coder  
這篇文章主要介紹了SpringBoot中利用MyBatis進(jìn)行數(shù)據(jù)操作,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

本例所用環(huán)境:

  • SpringBoot
  • MySQL
  • MyBatis
  • jdk1.8
  • Maven

首先我們先創(chuàng)建一個(gè)SpringBoot 項(xiàng)目。

數(shù)據(jù)庫(kù)連接配置

##數(shù)據(jù)庫(kù)連接配置(部署到哪臺(tái),對(duì)應(yīng)的ip需修改)
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis?connectTimeout=1000&useSSL=false&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver=com.mysql.jdbc.Driver

數(shù)據(jù)庫(kù)中的數(shù)據(jù)

環(huán)境配好之后,下面分別介紹一下通過(guò)注解或者通過(guò)xml映射的形式這兩種方法來(lái)使用MyBatis。

通過(guò)xml映射的形式

測(cè)試Bean

package com.example.demo.model;

public class User {
 private int id;
 private String name;
 private String sex;
 private int age;

 public User() {
 }

 public User(String name, String sex, int age) {
  this.name = name;
  this.sex = sex;
  this.age = age;
 }

 public User(int id, String name, String sex, int age) {
  this.id = id;
  this.name = name;
  this.sex = sex;
  this.age = age;
 }

 public int getId() {
  return id;
 }

 public void setId(int 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;
 }

 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }
}

XML形式的具體操作

將mapper定義為接口,只定義方法。具體的實(shí)現(xiàn)在同名的xml文件中。

package com.example.demo.mapper;

import com.example.demo.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface UserMapper {
 User getByName(@Param("name") String name);

 boolean insert(User user);

 boolean update(@Param("name") String name, @Param("sex") String sex, @Param("age") int age);

 void delete(@Param("name") String name);
}
<?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="getByName" resultType="com.example.demo.model.User" parameterType="java.lang.String">
  SELECT * FROM tb_user WHERE name = #{name}
 </select>

 <insert id="insert" parameterType="com.example.demo.model.User" useGeneratedKeys="true">
  INSERT INTO tb_user(name, sex, age) VALUES(#{name}, #{sex}, #{age})
 </insert>

 <update id="update" parameterType="com.example.demo.model.User">
  UPDATE tb_user SET sex=#{sex}, age=#{age} WHERE name=#{name}
 </update>

 <delete id="delete" parameterType="java.lang.String">
  DELETE FROM tb_user WHERE name = #{name}
 </delete>
</mapper>

兩個(gè)文件通過(guò)mapper.xml文件中的 namespace 形成映射。

一般情況下,我們用到的資源文件(各種xml,properites,xsd文件等)都放在src/main/resources下面(springboot回到對(duì)應(yīng)的位置加載文件),利用maven打包時(shí),maven能把這些資源文件打包到相應(yīng)的jar或者war里。但是,有的時(shí)候我們習(xí)慣把它和Mapper.java放一起,都在src/main/java下面,這樣利用maven打包時(shí),就需要修改pom.xml文件,來(lái)把mapper.xml文件一起打包進(jìn)jar或者war里了,否則,這些文件不會(huì)被打包的。(maven認(rèn)為src/main/java只是java的源代碼路徑)。

所以說(shuō),如果要將mapper.java和mapper.xml文件放在同一個(gè)位置,就需要在pom文件中指定xml文件的加載位置。

 <build>
 <resources> 
  <!-- maven項(xiàng)目中src源代碼下的xml等資源文件編譯進(jìn)classes文件夾,
   注意:如果沒(méi)有這個(gè),它會(huì)自動(dòng)搜索resources下是否有mapper.xml文件,
   如果沒(méi)有就會(huì)報(bào)org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): ... -->
  <resource> 
  <directory>src/main/java</directory> 
  <includes> 
   <include>**/*.xml</include> 
  </includes> 
  <filtering>true</filtering>
  </resource>
  
  <!--將resources目錄下的配置文件編譯進(jìn)classes文件 --> 
  <resource>
   <directory>src/main/resources</directory>
   <filtering>true</filtering>
  </resource>
 </resources> 
 </build> 

如果mapper.java和mapper.xml文件是分開(kāi)放置的,則不需要以上配置。

Service服務(wù)

package com.example.demo.service;

import com.example.demo.model.User;

public interface UserService {
 User getUserByName(String name);

 boolean addUser(User user);

 boolean updateUser(String name, String sex, int age);

 void deleteUser(String name);
}

Service服務(wù)的實(shí)現(xiàn)類(lèi)

package com.example.demo.service.impl;

import com.example.demo.mapper.UserMapper;
import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService{
 @Autowired
 UserMapper userMapper;

 @Override
 public User getUserByName(String name) {
  User user = userMapper.getByName(name);
  if (null != user){
   return user;
  }
  return null;
 }

 @Override
 public boolean addUser(User user) {
  return userMapper.insert(user);
 }

 @Override
 public boolean updateUser(String name, String sex, int age) {
  return userMapper.update(name, sex, age);
 }

 @Override
 public void deleteUser(String name) {
  userMapper.delete(name);
 }
}

測(cè)試接口

package com.example.demo.controller;

import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
 @Autowired
 UserService userService;

 @RequestMapping(value = "/index", method = RequestMethod.GET)
 public String index(){
  User user = userService.getUserByName("gyl");
  return user.getName()+"--"+user.getSex()+"--"+user.getAge();
 }
}

如果一切順利,即將輸入localhost:8080/index 你將看到如下內(nèi)容

通過(guò)注解的方式

package com.example.demo.mapper;

import com.example.demo.model.User;
import org.apache.ibatis.annotations.*;

@Mapper
public interface UserMapper {

 @Select("select * from TB_USER where NAME = #{name}")
 User getByName(@Param("name") String name);

 @Insert("insert into TB_USER(NAME, SEX, AGE) values(#{name}, #{sex}, #{age})")
 boolean insert(User user);

 @Update("update TB_USER set SEX=#{sex}, AGE=#{age} where NAME=#{name}")
 boolean update(@Param("name") String name, @Param("sex") String sex, @Param("age") int age);

 @Delete("delete from TB_USER where NAME = #{name}")
 void delete(@Param("name") String name);
}

如果一切順利,即將輸入localhost:8080/index 你將看到如下內(nèi)容

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring File Storage文件的對(duì)象存儲(chǔ)框架基本使用小結(jié)

    Spring File Storage文件的對(duì)象存儲(chǔ)框架基本使用小結(jié)

    在開(kāi)發(fā)過(guò)程當(dāng)中,會(huì)使用到存文檔、圖片、視頻、音頻等等,這些都會(huì)涉及存儲(chǔ)的問(wèn)題,文件可以直接存服務(wù)器,但需要考慮帶寬和存儲(chǔ)空間,另外一種方式就是使用云存儲(chǔ),這篇文章主要介紹了Spring File Storage文件的對(duì)象存儲(chǔ)框架基本使用小結(jié),需要的朋友可以參考下
    2024-08-08
  • Spring核心IoC和AOP的理解

    Spring核心IoC和AOP的理解

    本文主要介紹了Spring核心IoC和AOP的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-03-03
  • springboot+mybaties項(xiàng)目中掃描不到@mapper注解的解決方法

    springboot+mybaties項(xiàng)目中掃描不到@mapper注解的解決方法

    本文主要介紹了springboot+mybaties項(xiàng)目中掃描不到@mapper注解的解決方法,該報(bào)錯(cuò)表明掃描不到Mapper層,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • Spring?Boot集成LiteFlow規(guī)則引擎的詳細(xì)過(guò)程

    Spring?Boot集成LiteFlow規(guī)則引擎的詳細(xì)過(guò)程

    本文詳細(xì)介紹了如何在Spring?Boot應(yīng)用程序中集成LiteFlow規(guī)則引擎,并探討如何使用LiteFlow庫(kù)來(lái)實(shí)現(xiàn)業(yè)務(wù)流程的規(guī)則處理,將通過(guò)具體的示例來(lái)展示如何在Spring?Boot應(yīng)用程序中配置和使用LiteFlow規(guī)則引擎,以提高系統(tǒng)的靈活性和可維護(hù)性,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • java反射深入剖析(推薦)

    java反射深入剖析(推薦)

    下面小編就為大家?guī)?lái)一篇java反射深入剖析。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07
  • SpringBoot2.0集成MQTT消息推送功能實(shí)現(xiàn)

    SpringBoot2.0集成MQTT消息推送功能實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot2.0集成MQTT消息推送功能實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java?Collection接口中的常用方法總結(jié)

    Java?Collection接口中的常用方法總結(jié)

    這篇文章將大概用代碼案例簡(jiǎn)單總結(jié)一下?Collection?接口中的一些方法,我們會(huì)以他的實(shí)現(xiàn)類(lèi)?Arraylist?為例創(chuàng)建對(duì)象??煲黄饋?lái)看看吧
    2022-12-12
  • Java emoji持久化mysql過(guò)程詳解

    Java emoji持久化mysql過(guò)程詳解

    這篇文章主要介紹了Java emoji持久化mysql過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Spring?AOP中的環(huán)繞通知詳解

    Spring?AOP中的環(huán)繞通知詳解

    AOP是一種思想,是對(duì)某一類(lèi)事情的集中處理,接下來(lái)我們要學(xué)習(xí)的是運(yùn)用了AOP思想,進(jìn)行AOP的環(huán)繞處理,本文通過(guò)實(shí)例講解Spring?AOP中的環(huán)繞通知,感興趣的朋友一起看看吧
    2024-07-07
  • java數(shù)據(jù)結(jié)構(gòu)與算法之桶排序?qū)崿F(xiàn)方法詳解

    java數(shù)據(jù)結(jié)構(gòu)與算法之桶排序?qū)崿F(xiàn)方法詳解

    這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)與算法之桶排序?qū)崿F(xiàn)方法,結(jié)合具體實(shí)例形式詳細(xì)分析了桶排序的概念、原理、實(shí)現(xiàn)方法與相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05

最新評(píng)論

宜宾县| 郸城县| 浦东新区| 宁晋县| 韶关市| 万年县| 萨迦县| 岐山县| 如皋市| 大名县| 册亨县| 易门县| 阜南县| 庆安县| 宜君县| 桃园县| 拜泉县| 合作市| 惠州市| 英超| 苗栗市| 泊头市| 德钦县| 古蔺县| 同江市| 大同市| 汾西县| 广东省| 涟源市| 韶关市| 宿州市| 宁城县| 正宁县| 台南县| 通江县| 民丰县| 英德市| 大英县| 南充市| 额尔古纳市| 正安县|