领导说用bootdo 学习发现需要springboot+MyBatis 需要学习了解MyBatis 大大简化sql语句的书写。记得刚踏入社会在wg的时候,写后台用到sql都是反复的打开关闭数据库,而且结果集合需要自己去写,代码超级多。
MyBatis的运行流程:
一、Mybatis对JDBC的问题总结:
学习博客:MyBatis精简使用与配置
底层的原理学习,很受用。
数据库连接 :
问题:在用的时候打开数据库连接,在不用的时候关闭,频繁的开关和关闭,是一种资源的浪费
解决办法:利用连接池的方式连接数据库
Sql语句写在代码中:
问题:将sql写死在java代码中,不利于维护。一旦sql变更,需要重新编译java代码。
解决办法:将sql写在配置文件中,让程序读取配置文件
结果集遍历 :
问题:将列名写死在代码中,而且,需要人工的去封装称实体层对象,开发很繁琐。
解决办法: 通过某中机制,将从数据库查询出来的结果,自动的封装到实体类的对象中去
二、纯净MyBatis 配置
学习博客:MyBatis框架教程「入门起步」
1、我的项目目录:
2、引入jar包:
① mybatis-3.4.6.jar
② sqljdbc4.jar
添加方法:
3、main入口
程序的入口,加载核心配置文件,创建sqlsession工厂,生产sqlsession,执行sql语句
public class MyBatisTest {
public static void main(String[] args) {
SqlSession sqlSession = null;
try {
//加载核心配置文件
InputStream is = Resources.getResourceAsStream("com/sample/mybatis-config.xml");
//创建sqlsession工厂 -->相当于connection
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//获取sqlsession -->相当于执行sql语句对象
sqlSession = sqlSessionFactory.openSession();
//执行sql
// Map<String, Object> map = sqlSession.selectList("com.sample.TUser.load");
// System.out.println("map:" + map);
System.out.println("list:" + sqlSession.selectList("com.sample.TUser.load"));
} catch (IOException e) {
e.printStackTrace();
}finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
}
4、mybatis-config.xml
核心配置文件,包括数据库配置,这里使用sqlserver。 加载映射文件 也就是写的sql语句
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTDConfig 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置环境 -->
<environments default="hello">
<environment id="hello">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=student"/>
<property name="username" value="sa"/>
<property name="password" value="Wang8087266"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 sql语句 -->
<mappers>
<mapper resource="com/sample/TestMapper.xml" />
</mappers>
</configuration>
5、TestMapper.xml
sql语句部分 namespace要与实体类对应起来
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTDMapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sample.TUser">
<!-- 通过id返回数据 -->
<select id="load" resultType="map">
select * from T_user where 1=1
</select>
</mapper>
6、entity:TUser
实体类
public class TUser {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
7、打印输出结果
三、springboot 整合 MyBatis
学习博客:springboot整合mybatis
1、用IDEA创建集合MyBatis的springboot工程
这里选择 Gradle ,以前用AS写Android习惯了。
最后选择完需要的插件
2、创建完成的项目目录
3、程序运行main入口
SpringbootMybatisApplication
注意这里添加的 扫描的mapper
@MapperScan("com.weihao.springbootmybatis.mapper") //扫描的mapper
@SpringBootApplication
public class SpringbootMybatisApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisApplication.class, args);
}
}
4、UserMapper
数据库操作语句
@Repository
public interface UserMapper {
List<TUser> getUser();
}
5、核心配置文件 运行默认扫描 application.properties
主要添加 MyBatis配置 (实体类、mapper配置文件)
## Mybatis 配置
mybatis.typeAliasesPackage=com.weihao.springbootmybatis.entity
mybatis.mapperLocations=classpath:mapper/*.xml
mybatis.configuration.map-underscore-to-camel-case=true
# 定位页面的目录到static/下 (返回静态Html)
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.html
## 使用模版返回页面 (不是必须的 springboot默认就是从template中查询页面)
# 定位模板的目录
#spring.mvc.view.prefix=classpath:/templates/
# 给返回的页面添加后缀名
#spring.mvc.view.suffix=.html
##数据库地址
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=student
##数据库用户名
spring.datasource.username=sa
##数据库密码
spring.datasource.password=Wang8087266
##数据库驱动
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
6、SQL语句
entity实体类忽略不介绍了,主要是 UserMapper.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.weihao.springbootmybatis.mapper.UserMapper">
<select id="getUser" resultType="TUser">
SELECT * FROM T_user where 1=1
</select>
</mapper>
7、UserService
相当于impl,实现类。
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public List<TUser> getUser() {
return userMapper.getUser();
}
}
8、UserController
请求控制类
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/")
@ResponseBody
public List<TUser> getUser() {
System.out.println("getUser");
return userService.getUser();
}
}