Before use mybatis framework reading work:
jar package
core config XML file
mapper XML file
Core config xml file include:
- properties file input.
- class path alias setting.
- mapper file and mapper class register.
- dataSource information config.
mapper xml file include:
namespace token mapper file unique.
config execute sql command(insert,delete,update,select).
獲取Sqlsession對象:
String resource = "conf.xml";
//加載 mybatis 的配置文件(它也加載關(guān)聯(lián)的映射文件)
InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
//構(gòu)建 sqlSession 的工廠
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
//創(chuàng)建能執(zhí)行映射文件中 sql 的 sqlSession
SqlSession session = sessionFactory.openSession();
mybatis配置文件參數(shù)詳解:
- mybatis配置文件引人properties文件:
<properties resource="db.properties" />
- 因?yàn)榕渲梦募蓄惵窂竭^長,這里可以通過別名縮短類路徑:
<!-- 兩種方式設(shè)置 -->
<typeAlias type="com.haw.User" alias="User" />
<package name="com.been" /><!-- 需要注意id標(biāo)示為類名,且第一個字母小寫 -->
- 數(shù)據(jù)源配置:
<!-- 定義模式 1.work 2.development -->
<environments default="development">
<environment id="development">
<!-- 事務(wù)管理交給jdbc ,這里可以交給spring容器管理 -->
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<!-- 數(shù)據(jù)庫配置 -->
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
4.映射文件注冊:
<!-- 映射文件注冊-->
<mappers>
<!-- 通過xml方式注冊 -->
<mapper resource="com/haw/userMapper.xml" />
<mapper resource="com/haw2/userMapper.xml" />
<mapper resource="com/haw4/userMapper.xml" />
<mapper resource="com/haw5/classesMapper.xml" />
<mapper resource="com/haw6/studentMapper.xml" />
<mapper resource="com/haw7/userMapper.xml" />
<!-- 通過類注冊 -->
<mapper class="com.haw3.UserMapper" />
</mappers>
mybatis映射文件參數(shù)詳解:
- 每個映射文件必須聲明一個命名空間(namespace必須是唯一的):
<mapper namespace="com.haw.userMapper">
</mapper>
- 一個簡單的增刪改查配置:
<insert id="insertUser" parameterType="User">
insert into Users(name,age)values(#{name},#{age})
</insert>
<delete id="deleteUser" parameterType="int">
delete from Users where id = #{id}
</delete>
<update id="updateUser" parameterType="User">
update Users set name=#{name},age=#{age} where id=#{id}
</update>
<select id="getUserAll" resultType="User">
select * from Users
</select>
<select id="getUser" parameterType="int" resultType="User" >
select * from Users where id = #{id}
</select>
- id:操作的唯一標(biāo)識
- parameter:傳入?yún)?shù)。
- resultType:返回參數(shù)。
- 解決數(shù)據(jù)庫字段名與實(shí)體類屬性名不相同的沖突
<select id="getOrder" parameterType="int" resultMap="OrderMapper">
select * from orders where order_id = #{id}
</select>
<resultMap type="Order" id="OrderMapper">
<id property="id" column="order_id" />
<result property="orderNo" column="order_no" />
<result property="price" column="order_price" />
</resultMap>
通過resultMap參數(shù)配置數(shù)據(jù)庫字段雨實(shí)體類映射關(guān)系。
<id property="id" column="order_id" />
這里的id標(biāo)簽對應(yīng)數(shù)據(jù)庫的id字段。
property實(shí)體類字段。
column數(shù)據(jù)庫字段。
- 一對一查詢方式:
<!-- 一對一查詢方式 -->
<select id="getStudent" parameterType="int" resultMap="studentMap">
select *
from class c
right join teacher t
on c.teacher_id = t.t_id
right join student s
on c.c_id = s.class_id
where c.c_id = #{id}
</select>
<resultMap type="Classes" id="studentMap">
<id property="id" column="c_id" />
<result property="name" column="c_name" />
<!-- 這層property="teacher" 為classes類中的屬性teacher column 用來射影數(shù)據(jù)庫中的字段 javaType對應(yīng)Teacher類 -->
<!-- association用于單行數(shù)據(jù)處理 -->
<association property="teacher" column="teacher_id"
javaType="Teacher">
<id property="id" column="t_id" />
<result property="name" column="t_name" />
</association>
<!-- collection用于多行數(shù)據(jù)處理比如List -->
<collection property="list" ofType="Student">
<id property="id" column="s_id" />
<result property="name" column="s_name" />
</collection>
</resultMap>
- 通過注解方式配置映射關(guān)系:
實(shí)現(xiàn)過程:創(chuàng)建接口,配置信息通過注解方式配置。實(shí)現(xiàn)類實(shí)現(xiàn)接口。
// 通過注解方式
public interface UserMapper {
@Insert("insert into users(name,age)values(#{name},#{age})")
public int insert(User user);
@Update("update users set name=#{name},age=#{age} where id=#{id}")
public int update(User user);
@Delete("delete from users where id = #{id}")
public int delete(int id);
@Select("select * from users where id = #{id}")
public User getUser(int id);
@Select("select * from users")
public List<User> getAllUser();
}
@Test
public void testInsert() {
SqlSessionFactory sessionFactory = GetSession.seesion();
SqlSession session = sessionFactory.openSession(true);
UserMapper userMapper = session.getMapper(UserMapper.class);
int add =userMapper.insert(new User(-1,"hahah",22));
session.close();
System.out.println(add);
}
@Test
public void testUpdate() {
SqlSessionFactory sessionFactory = GetSession.seesion();
SqlSession session = sessionFactory.openSession(true);
UserMapper userMapper = session.getMapper(UserMapper.class);
int update =userMapper.update(new User(6,"user",0));
session.close();
System.out.println(update);
}
@Test
public void testDelete(){
SqlSessionFactory sessionFactory = GetSession.seesion();
SqlSession session = sessionFactory.openSession(true);
UserMapper userMapper = session.getMapper(UserMapper.class);
int delete =userMapper.delete(4);
session.close();
System.out.println(delete);
}
@Test
public void testGetUser(){
SqlSessionFactory sessionFactory = GetSession.seesion();
SqlSession session = sessionFactory.openSession();
UserMapper userMapper = session.getMapper(UserMapper.class);
User user =userMapper.getUser(6);
session.close();
System.out.println(user);
}
@Test
public void testGetAllUser() {
SqlSessionFactory sessionFactory = GetSession.seesion();
SqlSession session = sessionFactory.openSession();
UserMapper userMapper = session.getMapper(UserMapper.class);
List<User> user =userMapper.getAllUser();
session.close();
System.out.println(user);
}