怎么在SpringBoot中使用MyBatis操作数据
怎么在SpringBoot中使用MyBatis操作数据?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
首先我们先创建一个SpringBoot 项目。
数据库连接配置
##数据库连接配置(部署到哪台,对应的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
数据库中的数据
环境配好之后,下面分别介绍一下通过注解或者通过xml映射的形式这两种方法来使用MyBatis。
通过xml映射的形式
测试Bean
packagecom.example.demo.model; publicclassUser{ privateintid; privateStringname; privateStringsex; privateintage; publicUser(){ } publicUser(Stringname,Stringsex,intage){ this.name=name; this.sex=sex; this.age=age; } publicUser(intid,Stringname,Stringsex,intage){ this.id=id; this.name=name; this.sex=sex; this.age=age; } publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicStringgetSex(){ returnsex; } publicvoidsetSex(Stringsex){ this.sex=sex; } publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this.age=age; } }
XML形式的具体操作
将mapper定义为接口,只定义方法。具体的实现在同名的xml文件中。
packagecom.example.demo.mapper; importcom.example.demo.model.User; importorg.apache.ibatis.annotations.Mapper; importorg.apache.ibatis.annotations.Param; @Mapper publicinterfaceUserMapper{ UsergetByName(@Param("name")Stringname); booleaninsert(Useruser); booleanupdate(@Param("name")Stringname,@Param("sex")Stringsex,@Param("age")intage); voiddelete(@Param("name")Stringname); }
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mappernamespace="com.example.demo.mapper.UserMapper"> <selectid="getByName"resultType="com.example.demo.model.User"parameterType="java.lang.String"> SELECT*FROMtb_userWHEREname=#{name} </select> <insertid="insert"parameterType="com.example.demo.model.User"useGeneratedKeys="true"> INSERTINTOtb_user(name,sex,age)VALUES(#{name},#{sex},#{age}) </insert> <updateid="update"parameterType="com.example.demo.model.User"> UPDATEtb_userSETsex=#{sex},age=#{age}WHEREname=#{name} </update> <deleteid="delete"parameterType="java.lang.String"> DELETEFROMtb_userWHEREname=#{name} </delete> </mapper>
两个文件通过mapper.xml文件中的 namespace 形成映射。
一般情况下,我们用到的资源文件(各种xml,properites,xsd文件等)都放在src/main/resources下面(springboot回到对应的位置加载文件),利用maven打包时,maven能把这些资源文件打包到相应的jar或者war里。但是,有的时候我们习惯把它和Mapper.java放一起,都在src/main/java下面,这样利用maven打包时,就需要修改pom.xml文件,来把mapper.xml文件一起打包进jar或者war里了,否则,这些文件不会被打包的。(maven认为src/main/java只是java的源代码路径)。
所以说,如果要将mapper.java和mapper.xml文件放在同一个位置,就需要在pom文件中指定xml文件的加载位置。
<build> <resources> <!--maven项目中src源代码下的xml等资源文件编译进classes文件夹, 注意:如果没有这个,它会自动搜索resources下是否有mapper.xml文件, 如果没有就会报org.apache.ibatis.binding.BindingException:Invalidboundstatement(notfound):...--> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <!--将resources目录下的配置文件编译进classes文件--> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>
如果mapper.java和mapper.xml文件是分开放置的,则不需要以上配置。
Service服务
packagecom.example.demo.service; importcom.example.demo.model.User; publicinterfaceUserService{ UsergetUserByName(Stringname); booleanaddUser(Useruser); booleanupdateUser(Stringname,Stringsex,intage); voiddeleteUser(Stringname); }
Service服务的实现类
packagecom.example.demo.service.impl; importcom.example.demo.mapper.UserMapper; importcom.example.demo.model.User; importcom.example.demo.service.UserService; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.stereotype.Service; @Service publicclassUserServiceImplimplementsUserService{ @Autowired UserMapperuserMapper; @Override publicUsergetUserByName(Stringname){ Useruser=userMapper.getByName(name); if(null!=user){ returnuser; } returnnull; } @Override publicbooleanaddUser(Useruser){ returnuserMapper.insert(user); } @Override publicbooleanupdateUser(Stringname,Stringsex,intage){ returnuserMapper.update(name,sex,age); } @Override publicvoiddeleteUser(Stringname){ userMapper.delete(name); } }
测试接口
packagecom.example.demo.controller; importcom.example.demo.model.User; importcom.example.demo.service.UserService; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.web.bind.annotation.RequestMapping; importorg.springframework.web.bind.annotation.RequestMethod; importorg.springframework.web.bind.annotation.RestController; @RestController publicclassUserController{ @Autowired UserServiceuserService; @RequestMapping(value="/index",method=RequestMethod.GET) publicStringindex(){ Useruser=userService.getUserByName("gyl"); returnuser.getName()+"--"+user.getSex()+"--"+user.getAge(); } }
如果一切顺利,即将输入localhost:8080/index 你将看到如下内容
通过注解的方式
packagecom.example.demo.mapper; importcom.example.demo.model.User; importorg.apache.ibatis.annotations.*; @Mapper publicinterfaceUserMapper{ @Select("select*fromTB_USERwhereNAME=#{name}") UsergetByName(@Param("name")Stringname); @Insert("insertintoTB_USER(NAME,SEX,AGE)values(#{name},#{sex},#{age})") booleaninsert(Useruser); @Update("updateTB_USERsetSEX=#{sex},AGE=#{age}whereNAME=#{name}") booleanupdate(@Param("name")Stringname,@Param("sex")Stringsex,@Param("age")intage); @Delete("deletefromTB_USERwhereNAME=#{name}") voiddelete(@Param("name")Stringname); }
如果一切顺利,即将输入localhost:8080/index 你将看到如下内容
关于怎么在SpringBoot中使用MyBatis操作数据问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注恰卡编程网行业资讯频道了解更多相关知识。
推荐阅读
-
springboot实现基于aop的切面日志
本文实例为大家分享了springboot实现基于aop的切面日志的具体代码,供大家参考,具体内容如下通过aop的切面方式实现日志...
-
SpringBoot定时任务功能怎么实现
-
SpringBoot中的@Import注解怎么使用
-
SpringBoot整合Lombok及常见问题怎么解决
-
springboot图片验证码功能模块怎么实现
-
Springboot+SpringSecurity怎么实现图片验证码登录
-
SpringBoot注解的知识点有哪些
SpringBoot注解的知识点有哪些这篇“SpringBoot注...
-
SpringBoot2.x中management.security.enabled=false无效怎么解决
-
springboot怎么禁用某项健康检查
springboot怎么禁用某项健康检查今天小编给大家分享一下sp...
-
SpringBoot2怎么自定义端点