配置文件sqlMapConfig.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>
<!-- 取别名,为了省略书写 -->
<typeAliases>
<typeAlias type="cn.mybatis.domain.User" alias="User"/>
</typeAliases>
<!-- 环境配置
default="随便去名字"
<environment id="可以与上面的同名或者随便取名">
-->
<environments default="development">
<environment id="development">
<!-- 事务管理
事务:有JDBC/MANAGED
-->
<transactionManager type="JDBC"></transactionManager>
<!--数据源 :有UNPOOLED(不用连接池)/POOLED/JNDI(一般远程操作的时候用)
-->
<dataSource type="POOLED"></dataSource>
</environment>
</environments>
<!-- 映射文件的位置 -->
<mappers>
<mapper resource="cn/mybatis/domain/User.xml"/>
</mappers>
</configuration>
使用实体类User
package cn.mybatis.domain;
public class User {
private String id;
private String username;
private String address;
public String getId() {
System.out.println("通过get方法获取ID、、、、、");
return id;
}
public void setId(String id) {
System.out.println("通过set方法注入ID、、、、、");
this.id = id;
}
public String getUsername() {
System.out.println("通过给get方法注入username、、、、、");
return username;
}
public void setUsername(String username) {
System.out.println("通过set方法注入usernmame、、、、、");
this.username = username;
}
public String getAddress() {
System.out.println("通过get方法注入address、、、、、");
return address;
}
public void setAddress(String address) {
System.out.println("通过set方法注入address、、、、、");
this.address = address;
}
@Override
public String toString() {
return "id: " + id +" username: " + username + " address: " + address;
}
}
映射文件User.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="cn.itcast.mybatis.domain.User">
<resultMap type="cn..mybatis.domain.User" id="userMap">
<id column="id" property="id"/>
<result column="name" property="username"/>
<result column="address" property="address"/>
</resultMap>
<sql id="mysql">
id,name,address
</sql>
<select id="selectUserById" parameterType="String" resultType="cn.mybatis.domain.User">
select * from user where id = #{id}
</select>
<select id="selectAllUsers" resultMap="userMap">
select * from user
</select>
<select id="selectAllByUser" resultType="cn.mybatis.domain.User">
select id,name as username,address from user
</select>
<!--根据ID查询user,返回值为Map -->
<select id="selectUserByIdForMap" parameterType="string" resultType="hashMap">
select id,name as username,address from user where id = #{id}
</select>
<!-- 动态sql -->
<select id="selectUserByCondition" parameterType="User" resultType="User">
select id,name as username,address form user where 1=1
<if test="id != null">
and id = #{id}
</if>
<!-- userName指的是实体的属性 -->
<if test="userName != null">
and name = #{username}
</if>
<if test="address != null">
and address = #{address}
</if>
</select>
<!-- 动态sql -->
<select id="selectUserByCondition2" parameterType="User" resultType="User">
select id,name as username,adderss from user
<where>
<if test="id != null">
id = #{id}
</if>
<!-- userName指的是实体的属性 -->
<if test="userName != null">
and name = #{username}
</if>
<if test="address != null">
and address = #{address}
</if>
</where>
</select>
<!-- 插入User -->
<insert id="insertUser" parameterType="cn.mybatis.domain.User">
insert into user(id,name,address) values(#{id},#{username},#{address})
</insert>
<!-- 插入User 参数为Map -->
<insert id="insertUserForMap" parameterType="hashMap">
insert into user(id,name,address) values(#{id},#{username},#{address})
</insert>
<!-- 插入User 参数为Map -->
<delete id="deleteUserById" parameterType="string">
delete from user where id = #{userid}
</delete>
<!--根据id更新User -->
<update id="updateUserById" parameterType="cn.mybatis.domain.User" >
update user set name=#{username},address=#{address} where id = #{id}
</update>
<!--根据id更新User 参数为map-->
<update id="updateUserByIdForMap" parameterType="hashMap">
update user set name=#{name},address=#{address} where id = #{id}
</update>
</mapper>
利用Junit单元测试进行测试编写的类MybatisTest
测试的只是其中一些简单的sql语句:
package cn.mybatis.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import cn.mybatis.domain.Order;
public class MyBatisTest {
SqlSessionFactory sf;
@Before
public void init()throws Exception{
String resource = "sqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sf = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void test() throws IOException{
SqlSession session = sf.openSession();
//查询的结果返回的是一条记录
//调用:(namespace)名称空间.sql语句的id
User u = session.selectOne("cn.mybatis.domain.User.selectUserById","01");
System.out.println(u);
//查询的结果返回的是一个list集合
List<User> list = session.selectList("cn.mybatis.domain.User.selectAllUsers");
for(User user: list){
System.out.println(user);
}
}
//查询所有记录
@Test
public void test1()throws Exception{
SqlSession session = sf.openSession();
List<User> list = session.selectList("cn.mybatis.domain.User.selectAllByUser");
for(User u:list){
System.out.println(u);
}
}
//添加User
@Test
public void test2()throws Exception{
SqlSession session = sf.openSession();
User user = new User();
user.setId("04");
user.setUsername("你猜");
user.setAddress("海南");
//向数据库中插入数据 第一个参数为调用的ID(完整的类名.映射文件中个的id) 第二个参数,要插入的数据
int i = session.insert("cn.mybatis.domain.User.insertUser", user);
System.out.println(i);
session.commit();
}
//根据id查询User,返回值为hashMap
@Test
public void test3()throws Exception{
SqlSession session = sf.openSession();
Map m = session.selectOne("cn.mybatis.domain.User.selectUserByIdForMap","01");
System.out.println(m);
}
//添加User 参数为HashMap
@Test
public void test4()throws Exception{
SqlSession session = sf.openSession();
Map user = new HashMap();
user.put("id", "011");
user.put("name", "嘿嘿");
user.put("address", "妮妮");
int i = session.insert("cn.mybatis.domain.User.insertUserForMap",user);
System.out.println(i);
session.commit();
}
//添根据ID删除User
@Test
public void test5()throws Exception{
SqlSession session = sf.openSession();
int i = session.delete("cn.mybatis.domain.User.deleteUserById", "05");
System.out.println(i);
session.commit();
}
//根据id更新user
@Test
public void test6()throws Exception{
SqlSession session = sf.openSession();
User user = new User();
user.setId("04");
user.setUsername("国产007");
user.setAddress("厉害");
session.update("cn.mybatis.domain.User.updateUserById", user);
session.commit();
}
//根据id更新user 参数为map
@Test
public void test7()throws Exception{
SqlSession session = sf.openSession();
Map user = new HashMap();
user.put("id", "03");
user.put("name", "21");
user.put("address", "妮妮");
int i = session.update("cn.mybatis.domain.User.updateUserByIdForMap", user);
session.commit();
}
//查询person
@Test
public void test8()throws Exception{
SqlSession session = sf.openSession();
List<Person> list = session.selectOne("cn.mybatis.domain.Person.selectPersonById", "001");
for(Person p : list){
System.out.println(p);
}
/*
Person p = session.selectOne("cn.mybatis.domain.Person.selectPersonById", "001");
System.out.println(p.getOrders().get(0));*/
}
@Test
public void test9()throws Exception{
SqlSession session = sf.openSession();
Order o = session.selectOne("cn.mybatis.domain.Order.selectOrderById", "002");
System.out.println(o.getPerson().getName());
}
//测试动态sql查询
@Test
public void test10()throws Exception{
/*SqlSession session = sf.openSession();
User u = new User();
u.setId("03");
List<User> list = session.selectList("cn.mybatis.domain.User.selectUserByCondition", "03");
for(User us:list){
System.out.println(us);
}*/
SqlSession session = sf.openSession();
User u = new User();
u.setId("03");
//u.setUsername("xixi");
//u.setAddress("dd");
List<User> users = session.selectList("cn.mybatis.domain.User.selectUserByCondition2", u);
for(User us : users){
System.out.println(us);
}
}}
其中占位符例如:
myBatis #{id}
mybatis与hibernate比较:
Hibernate
hibernate.cfg.xml Hibernate配置文件
User.hbm.xml 对应数据库一张真实表,配置表之间的关系
User.java 对应映射的字段
SessionFactory localSessionFactoryBean
Mybatis
sqlMapConfig.xml Mybatis配置文件
User.xml 对应sql构造出的虚拟表,resultMap配置多表之间的关系
User.java 对应映射的字段
SessionFactory sqlSessionFactoryBean
其中需要依赖的jar包: