一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第18天,点击查看活动详情。
1.9 编写UserMapper接口
1.queryUserList()方法为查询User表所有数据,
2.queryUserByID()方法为根据id查询,
3.addUser 方法为增加一条数据,
4.updateUser方法 为更新一条数据,
5.deleteUser方法为删除一条数据,
6.@Mapper 注解的作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类,另一个方式:在启动类上加@MapperScan注解也可以起到相同的作用,二者选一个即可
package com.example.myFirstBlog.mapper;
import com.example.myFirstBlog.entity.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
List<User> queryUserList();
User queryUserByID(int id);
int addUser(User user);
int updateUser(User user);
int deleteUser(int id);
}
复制代码
1.10 编写 UserMapper.xml
( 1.参数 namespace 为对应的UserMapper接口的全限定名. 2. 在mapper标签下写对应的sql语句,id 为接口对应的函数名,3.resultType/resultMap 为函数的返回值类型,parameterType/Map 为函数参数类型,Map 比 Type 更灵活.4.每种sql语句都有对应的标签,例如查询语句对应select标签,插入语句对应insert标签等)
<?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.myFirstBlog.mapper.UserMapper">
<!--resultMap 作用就是 使数据库中的字段与实体类中的字段形成映射关系 -->
<resultMap id="userMap" type="User">
<!--column数据库中的字段 property实体类中的字段 -->
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="pwd" property="pwd"/>
</resultMap>
<select id="queryUserList" resultMap="userMap">
select * from user
</select>
<select id="queryUserByID" resultType="User">
select * from user where id = #{id}
</select>
<insert id="addUser" parameterType="User">
insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
</insert>
<update id="updateUser" parameterType="User">
update user set name = #{name},pwd = #{pwd} where id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
</mapper>
复制代码
1.11 编写UserController
1.@RestController 处理http请求,返回json 相当于 @Controller + @ResponseBody;
2.@Resource 和 @Autowired 作用类似:@Resource和@Autowired都是做bean的注入时使用,两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。
3.@RequestMapping是一个用来处理请求地址映射的注解,可用于类或者方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
4.通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx”) 绑定到操作方法的入参中。
package com.example.myFirstBlog.controller;
import com.example.myFirstBlog.entity.User;
import com.example.myFirstBlog.mapper.UserMapper;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
public class UserController {
@Resource
private UserMapper userMapper;
@RequestMapping("/queryUserList")
public List<User> queryUserList(){
List<User> userList = userMapper.queryUserList();
return userList;
}
@RequestMapping("getUser/{id}")
public User queryUserByID(@PathVariable int id){
User user = userMapper.queryUserByID(id);
return user;
}
@RequestMapping("/addUser")
public String addUser(){
userMapper.addUser(new User(3,"wangwu","2345"));
return "add is successful";
}
@RequestMapping("/updateUser")
public String updateUser(){
userMapper.updateUser(new User(3,"wangwu","666666"));
return "update is successful";
}
@RequestMapping("/deleteUser")
public String deleteUser(){
userMapper.deleteUser(2);
return "delete is successful";
}
}
复制代码