赞
踩
解决方案:将数据库驱动名、数据库URL、数据库用户名、密码配置在xml|properties
解决方案:sql语句写在xml文件、占位符的索引自动分配、占位符的值可以根据索引进行自动绑定。
*查询结果的列名存在硬编码、对象需要自己创建、对象的属性需要自己赋值、需要手工将对象添加至列名。
解决方案:查询结果的列名可以配置在xml文件中、对象可以自动创建、对象的属性值可以自动绑定、对象自动添加到列表中去。
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
#{}相当于占位符 | ${}相当于字符串拼接符 |
---|---|
#{}解决了sql注入 | ${}存在sql注入 |
${}在动态解析的时候,会将我们传入的参数当做String字符串填充到我们的语句中
#{} 在动态解析的时候,会解析成一个参数标记符。
#{}将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。
缓存目的是为了减少对数据库的访问次数,提升数据库的执行效率。
mybatis缓存机制包括:1.一级缓存 2.二级缓存
一级缓存也叫sqlSession级别的缓存 ,也就是在同一个sqlSession内执行两次多次相同结果的查询语句,只会在第一次时发出sql查询数据库的数据,然后之后每次从一级缓存中查询数据返回。
二级缓存是mapper级别的缓存,也就是同一个namespace的mappe.xml,当多个SqlSession使用同一个Mapper操作数据库的时候,得到的数据会缓存在同一个二级缓存区域
参考:https://www.cnblogs.com/aishangJava/p/10526957.html
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
spring:
datasource:
password: 123
username: root
url: jdbc:mysql://localhost:3306/stus
public class Department { private Integer id; private String departmentName; public Department() { } public Department(Integer id, String departmentName) { this.id = id; this.departmentName = departmentName; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getDepartmentName() { return departmentName; } public void setDepartmentName(String departmentName) { this.departmentName = departmentName; } }
@Mapper
public interface DepartmentMapper {
@Select("select * from department where id = #{id}")
public Department Select();
@Delete("delete form department where id = #{id}")
public void delete();
@Update("update department set departmentName=#{departmentName} where id=#{id}")
public void update();
@Options(useGeneratedKeys = true,keyProperty = "id")
@Insert("insert into department(departmentName) values(#{departmentName})")
public void insert(Department department);
}
@Controller @ResponseBody public class departmentController { @Autowired DepartmentMapper mapper; @GetMapping("/dept/{id}") public Department getDepartment(@PathVariable("id") Integer id){ return mapper.Select(); } @GetMapping("/dept") public Department insert(Department department){ mapper.insert(department); return department; } }
GetMapping("/dept/{id}")
不需要加#号
insert into department(departmentName) values(#{departmentName})
@Options(useGeneratedKeys = true,keyProperty = "id")
@Insert("insert into department(departmentName) values(#{departmentName})")
public void insert(Department department);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。