入门步骤:
1.首先配置核心文件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>
<properties resource="db.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
</configuration>
2.创建实体类:设置属性,getset方法等。
3.创建mapper接口:用于需要存放用到的方发。
4.创建myBatis的映射文件:
ORM对象关系映射
java与数据库相对应的概念:类-->表;属性-->字段/列;对象-->记录/行
映射文件命名规则:用实现类+Mapper.xml的格式,如User----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.wei.mybatis.mapper.employeeMapper">
<insert id="insertEmp">
</insert>
</mapper>
当要在映射文件中添加方法时需要注意两点很重要!!!
1.namespace的引号中要填写相对应的实现接口的全类名。
2.要用到的方法的id位置要与相对应的实现接口中的方法名相同。
public interface employeeMapper { int insertEmp(); }
<mapper namespace="com.wei.mybatis.mapper.employeeMapper"> <insert id="insertEmp"> </insert>
5.在核心配置文件中引入映射文件
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
//需要引入的映射文件填在mappers中
<mappers>
<mapper resource="mapper/employeeMapper.xml"/>
</mappers>
</configuration>
6.创建测试类
public class MyBatisTest {
@Test
public void testMyBatis()throws IOException {
//加载核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//获取SqlSessionFactoryBuilder
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//获取SqlSessionFactory
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//获取SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取mapper接口对象
employeeMapper Mapper = sqlSession.getMapper(employeeMapper.class);
//测试功能
int result = Mapper.insertEmp();
//提交事务
sqlSession.commit();
System.out.println("result:"+result);
}
测试类过程可以进行优化:1.sqlSession.commit();为手动提交事务管理,可以在SqlSession sqlSession = sqlSessionFactory.openSession(true);的小括号中写true,能够自动提交事务,就可以不用commit。
查询方法(select)
注意要点 :必须设置resultType或resultMap.
resultType:设置默认的映射关系。(属性名与字段名一致时使用)
resultMap:设置自定义映射关系。(属性名与字段名不一致时使用)
---------------------------------------------------------------------------------
配置文件属性
1.environment
<!--environments:用于配置多个数据库连接环境
default:用于存放默认使用的环境的id-->
<environments default="development">
<!--environment:配置某个具体环境
属性:
id:标识链接库的环境的唯一标识-->
<environment id="development">
<!--transactionManager:用于设置事务管理方式
属性:
type="JDBC\MANAEGD"
JDBC:表示当前环境中,执行SQL时,使用的是JDBC中原生的事务管理方式,事务的提交或回滚需要手动处理
MANAEGD:被管理。
-->
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
2.properties
将properties引入核心配置文件
<properties resource="db.properties"/>
db.properties
mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&\
characterEncoding=utf8&userUnicode=true&useSSl=false
mysql.username=root
mysql.password=123456
3.typeAliases
设置类型别名,方便在resultType等地方直接使用别名
例:
<typeAliases>
<typeAlias type="com.wei.mybatis.test.pojo.employer" alias="emp"/>
</typeAliases>
则可直接使用resultType=“emp”。
当没有设置alias时,就默认别名是实体类名employer。
--------------------------------------------
Mybatis中获取值的方式:
${} #{}
${}本质字符串拼接,此法需要注意'单引号的使用
#{}本质占位符赋值
Mybatis获取参数值的各种情况:
1.mapper接口方法的参数为单个的字面量类型
可以通过${}和#{}以任意的字符串获取参数值,但是需要注意${}的单引号问题
<select id="GetempByemployername" resultType="com.wei.mybatis.test.mapper.employerMapper">
select *from employer where empname = #{empname}
select *from employer where empname ='${empname}'
</select>
2.mapper接口方法多个参数
此时Mybatis会将这些参数放在一个map集合中,以两种方式进行存储
a>arg0,arg1...为键,以参数为值
b>param1,param2...为键,以参数为值
因此只需要通过#{}${}以键的方式访问即可,需要注意${}的单引号问题
<select id="checkLogin" resultType="......">
select *from t_user where username = #{arg0} and password=#{arg1}
select *from t_user where username = #{param1} and password=#{param2}
select *from t_user where username = #{param1} and password=#{arg2}
select *from t_user where username ='${param1}' and password = '${param2}'
</select>
3.当mapper接口参数有多个时,手动将这些参数放在一个map中存储。
因此只需要通过#{}${}以键的方式访问即可,需要注意${}的单引号问题
employer checkLoginByMap(Map<String,Object>map);
<select id="checkLogin" resultType="......">
select *from t_user where username = #{username} and password=#{password}
select *from t_user where username ='${username}' and password = '${password}'
</select>
4.mapper接口方法的参数是实体类类型的参数
通过属性名,添加属性值。
因此只需要通过#{}${}以键的方式访问即可,需要注意${}的单引号问题
int insertemployer(employer employer1);
<insert id="insertemployer">
insert into employer values(null,#{empname},#{password},#{age},#{sex})
</insert>
5.使用@param注解命名参数
a>以@Param注解的值为键,以参数为值
b>以param1,param2...为键,以参数为值
因此只需要通过#{}${}以键的方式访问即可,需要注意${}的单引号问题
employer checkLoginByParam(@Param("username") String username, @Param("password") String password);
}
<select id="checkLoginByParam" resultType="...">
select * from employer where username = #{username} and password = #{password}
</select>
---------------------------------------------------------
Mybatis各种查询功能
1.若查询出的数据只有一条,可以通过实体类对像或集合接收。
2.若查询的数据有多条,一定不能通过实体类对象接收,可以通过list集合来接收。
a>通过实体类类型的list集合接收
b>通过map类型的list集合接收
c>可以在mapper接口的方法上添加@MapKey注解,此时就可以将每条数据转换的map集合作为值,以某个字段的值作为键,放在同一个map集合中。
public interface departmentMapper {
/*
根据id查询用户信息
*/
department getUserById(@Param("id") Integer id);
/*
查询所有用户信息
*/
List<department> getAllUser();
Map<String,Object> getuserByIdToMap(@Param("id") Integer id);
/**
* 查询所有用户信息为Map集合
*/
List<Map<String,Object>> getAllUserToMap();
/**
* 查询所有用户信息为Map集合
*List<Map<String,Object>> getAllUserToMap();
*/
@MapKey("id")
Map<String,Object> getAllUserToMap();
}
-----------------------------------------------------------------------------------
Mybatis模糊查询
三种方式:
第二种concat()是拼接方式
<select id="getUserByLike" resultType="User">
select * from t_user where username like '%${username}%'
select * from t_user where username like concat('%',#{username},'%')
select * from t_user where username like "%"#{username}"%"
</select>
------------------------------------------------------
批量删除
where in(),只能与${}配套使用。
/**
* 批量删除
*/
int deleteMore(@Param("ids") String ids);
//此处的ids是多个id的集合
<delete id="deleteMore">
delete from t_user where id in(${ids})
</delete>
动态获取表名
/**
* 查询指定表中的数据
*/
List<department> getUserByTableName(@Param("tableName") String tableName);
<select id="getUserByTableName" resultType="department">
select * from ${tablename}
</select>
获取自增的主键
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into t_user values (null ,#{username},#{password},#{age},#{sex},#{email})
</insert>