网站建设关键要做好哪些年度关键词
文章目录
- 全注解方式
- 注解和XML结合
- 注意
- 最后
全注解方式
- 创建一个springboot项目,勾选如下启动器
- pom.xml 依赖如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.apdoer</groupId><artifactId>springboot-mybatis</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot-mybatis</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.18</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
- 配置文件使用yml
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: 123456url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8
springboot会自动加载application.yml相关配置,配置会自动注入到SqlSessionFactory中,SQLSessionFactory会自动注入到mapper中
注意新版本的驱动中间多了个cj
注意新版本的驱动中间多了个cj
注意新版本的驱动中间多了个cj
- 项目目录结构如下
- 实体类代码
/*** @Description user* @Author apdoer* @Date 2019/4/18 20:31* @Version 1.0*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private static final long serialVersionUID = 6215706484608288089L;// 用户IDprivate Long userId;// 账号private String account;// 用户名称private String name;// 邮箱private String email;// 密码private String password;// google密钥private String googleCode;private String avator;// 启用状态(0:启用,1:不启用,2:删除)private Byte enabled;// 备注private String remark;// 创建时间private Date createTime;
}
- mapper接口代码【这里用的是全注解】
@Mapper
public interface UserMapper {@Select("select * from web_user")List<User> getUsers();@Insert("insert into web_user(username,password) values (#{username},#{password})")int insertUser(@Param("username")String username,@Param("password") String password);
}
- service代码如下
/*** @Description userService* @Author apdoer* @Date 2019/4/1820:32* @Version 1.0*/
@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public List<User> getUsers(){return userMapper.getUsers();}/*** 事务*/@Transactionalpublic void insertUser() {userMapper.insertUser("张三","测试");//模拟出错int i = 5 / 0;userMapper .insertUser("李四","测试事务");}
}
- 控制层代码如下
/*** @Description userController* @Author apdoer* @Date 2019/4/18 20:40* @Version 1.0*/
@RestController
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/users")public List<User> getUser(){List<User> users = userService.getUsers();return users;}/*** 为了省事就不适用postmapping了,直接请求* @return*/@RequestMapping("/insert")public String insert(){userService.insertUser();return "insert";}
}
启动项目,访问
localhost:8080/users
可以看到如下,user都查出来了
访问localhost:8080/insert
也可以看到,两次操作都没有成功
注解和XML结合
因为有了xml配置文件,所以我们要在配置中指定xml配置文件的位置,把application.yml改造成如下
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: 123456url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8
#指定mybatis映射文件的地址
mybatis:mapper-locations: classpath:mapper/*.xml
这样,他就会去项目的classpath目下找mapper下面的所有以.xml结尾的文件
- 接口代码如下
@Mapper
public interface UserMapper {User getUser();int insertUser(@Param("username")String username,@Param("password") String password);
}
- xml配置文件
<?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.apdoer.springbootmybatis.com.apdoer.mapper.UserMapper"><resultMap id="BaseResultMap" type="com.apdoer.springbootmybatis.com.apdoer.pojo.User"><id column="user_id" jdbcType="BIGINT" property="userId"/><result column="account" jdbcType="VARCHAR" property="account"/><result column="name" jdbcType="VARCHAR" property="name"/><result column="email" jdbcType="VARCHAR" property="email"/><result column="password" jdbcType="VARCHAR" property="password"/><result column="google_code" jdbcType="VARCHAR" property="googleCode"/><result column="avator" jdbcType="VARCHAR" property="avator"/><result column="enabled" jdbcType="TINYINT" property="enabled"/><result column="remark" jdbcType="VARCHAR" property="remark"/><result column="create_time" jdbcType="TIMESTAMP" property="createTime"/></resultMap><select id="getUser" resultMap="BaseResultMap">select * from web_user limit 1</select><insert id="insertUser" >insert into web_user (username,password) values (#{username},#{password})</insert>
</mapper>
- service代码如下
@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public User getUsers(){return userMapper.getUser();}/*** 事务*/@Transactionalpublic void insertUser() {userMapper.insertUser("张三","测试");//模拟出错int i = 5 / 0;userMapper .insertUser("李四","测试事务");}
}
- 控制器代码
@RestController
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/users")public User getUser(){User user = userService.getUsers();return user;}/*** 为了省事就不适用postmapping了,直接请求* @return*/@RequestMapping("/insert")public String insert(){userService.insertUser();return "insert";}}
- 启动后访问
localhost:8080/users
,也是可以获取到的,事务也是没问题的
注意
mapper接口可以再每个mapper文件都加上@Mapper注解,也可以不加注解,直接在启动器上加@MapperScan(“com.apdoer.springboot-mybatis.com.mapper”) 指定扫描的包路径
如果出现了Invalid bound statement (not found)
问题,可以参考以下几种解决方式1,mapper.xml文件的命名空间是否正确(namespace)
2.接口中的方法在xml文件中是否存在
3.select没有正确配置resultMap
4.mapper.xml扫描路径是否配置正确
5.接口名与文件名不需要一模一样,只要xml的namespce与接口全名对应就可以了,但是建议写一样
6.注意空格! 注意空格! 注意空格!
最后
本章代码在git仓库