Mybatis
Mybatis是持久层(将程序的数据从瞬间状态转换成持久状态)框架,
优点
- 方便小巧易学
- 耦合性低,实现了sql和代码的分离。
配置文件
在子模块src/main/resources目录下创建配置文件mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&
characterEncoding=UTF-8&serverTimezone=GMT"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
//重要
<mappers>
<mapper resource="com/rush/dao/UserMapper.xml"/>
</mappers>
</configuration>
在dao层的一个类下建立对应的Mapper文件
//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.rush.dao.UserDao">
<select id="getUserList" resultType="com.rush.po.User">
select * from user;
</select>
</mapper>
测试类
方式一
package com.rush.dao;
import com.rush.po.User;
import com.rush.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
/**
* @author:zmc
* @function:
* @date: 2020/7/29 9:47
*/
public class UserDaoTest {
public static void main(String[] args) {
SqlSession sqlSession = MybatisUtils.getSqlSession();
(sqlSession){
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList = userDao.getUserList();
for (User user : userList) {
System.out.println(user);
}
}
}
}
方式二
package com.rush.dao;
import com.rush.po.User;
import com.rush.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
/**
* @author:zmc
* @function:
* @date: 2020/7/29 9:47
*/
public class UserDaoTest {
public static void main(String[] args) {
SqlSession sqlSession = MybatisUtils.getSqlSession();
(sqlSession){
List<User> userList = sqlSession.selectList("com.rush.dao.UserDao.getUserList");
for (User user : userList) {
System.out.println(user);
}
}
}
}
推荐使用第一种 避免了第二种可能需要的强转
根据ID查询对象
//配置文件中
</select>
<select id="getUserById" parameterType="int" resultType="com.rush.po.User">
select * from user where id = #{
id}
</select>
//UserDao中
List<User> getUserById(int id);
添加一个新用户
//Mapper中
<select id="addUser" parameterType="com.rush.po.User">
insert into mybatis.user (id,username) values (#{id},#{username})
</select>
如果没有提交成功检查一下是否需要提交事务
修改用户
<update id="updateUser" parameterType="com.rush.po.User">
update mybatis.user set username = #{username} where id = #{id}
</update>
字段名和对象属性名不匹配的写法
//测试类
HashMap<String, Object> map = new HashMap<>();
map.put("sid",5);
map.put("susername","mmmmmmc");
try (sqlSession) {
userDao.addUser2(map);
sqlSession.commit();
}
}
//Dao
void addUser2(Map<String,Object> map);
//mapper
<insert id="addUser2" parameterType="map">
insert into mybatis.user