一.准备
1.三个Jar包,
1.mybatis-3.2.1.jar
2.mysql-connector-java-5.1.12-bin.jar
3.log4j-1.2.17.jar
2.vo类对象
public class SysUser {
private Long id;
private String name;
private String loginName;
private String password;
private String avatar;
/** getter and setter */
@Override
public String toString() {//右键source-toString重写
return "SysUser [avatar=" + avatar + ", id=" + id + ", loginName="
+ loginName + ", name=" + name + ", password=" + password + "]";
}
}
二.建立Dao层与映射文件
1.mybatis-config.xml配置文件
最基础的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">
<!-- 配置文件名mybatis-config.xml不要换,虽然没问题 -->
<configuration><!-- 配置 -->
<!-- 名称替换,替换完就可以用属性alias的值代替type里的对象用各种对应的在Mapper.xml里了 -->
<!-- 必须写在“环境”标签之前 -->
<typeAliases>
<typeAlias alias="SysUser" type="org.jsoft.vo.SysUser" />
</typeAliases>
<environments default="development"> <!-- 环境群 default属性参数下面id的标记的表示默认环境-->
<environment id="development"><!-- 单个的环境 id属性标记一下-->
<transactionManager type="JDBC" />
<dataSource type="POOLED"><!-- 支持多个数据源,下面是连接MySQL需要的参数 -->
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers><!-- src的路径,对应vo对象的映射xml文件,注意一定要用斜杠/ -->
<mapper resource="org/soft/vo/SysUserMapper.xml" />
</mappers>
</configuration>
2.dao层核心java代码
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
//以下代码即可创建sqlsession
String resource = "mybatis/mybatis-config.xml";//路径字符串内容必须语法规范,位置也可放在src根目录下
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
由此 建立了session会话
3.Dao层增删改查java代码与映射
(1)建立对应的SysUserMapper.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.xml 对应一张表 -->
<mapper namespace="SysUserMapper"><!-- org.jsoft.vo.SysUserMapper -->
<!-- id是查询的标记,resultType属性必须是带包名的对象, -->
<select id="selectOne" parameterType="SysUser" resultType="SysUser">
select * from SysUser where id = #{id}
</select>
<insert id="insert" parameterType="SysUser">
insert into SysUser
(name,loginName,password,avatar)
values
(#{name},#{loginName},#{password},#{avatar})
</insert>
<update id="update" parameterType="SysUser">
update SysUser
<set><!-- 取代语法set -->
<if test="name != null">name = #{name},</if>
<if test="loginName != null">loginName = #{loginName},</if>
<if test="avatar != null">avatar = #{avatar},</if>
<if test="password != null">password = #{password},</if>
</set>
where id = #{id}
</update>
<delete id="delete" parameterType="SysUser">
delete from SysUser where id =
#{id}
</delete>
<!-- 这个语句本人在java方法里设置成了selectList返回一个list -->
<select id="selectOneByList" parameterType="SysUser" resultType="SysUser">
select *
from SysUser where id = #{id}
</select>
<!-- 动态语句 -->
<!-- 条件查询 -->
<!-- 以list的形式返回多个对象,resultType属性必须对应 相应的对象,即返回的List里是SysUser对象-->
<select id="query" parameterType="SysUser" resultType="SysUser">
select * from SysUser
<where><!-- 取代where,并且不用考录多and的问题 -->
<!-- 条件值查询,test内的字符串为一个Boolean类型,为true就执行 -->
<if test="id != null">and id = #{id}</if>
<if test="name != null">and name = #{name}</if>
<if test="loginName != null">and loginName = #{loginName}</if>
<if test="password != null">and password = #{password}</if>
<if test="avatar != null">and avatar = #{avatar}</if>
</where>
</select>
<!-- 通过in语法查多个id的对象 -->
<select id="selectSysUserIn" resultType="SysUser">
SELECT *
FROM SYSUSER
WHERE ID in<!-- 查询所有id字段后的值对应的结果 -->
<!-- 循环标签 -->
<!-- collection循环的是一个list,item是循环的内容,index是索引,有可能不用 -->
<foreach item="item" index="index" collection="list" open="("
separator="," close=")"><!-- 开头分隔结尾分别所用的属性 -->
#{item}
</foreach>
</select>
</mapper>
(2)Dao层增删改查方法
1.查一个,并返回POJO
SqlSession session = sqlSessionFactory.openSession();
SysUser s = new SysUser();
s.setId(1L);
s.setLoginName("Bob");
s.setName("pink");
s.setPassword("21");
SysUser sysUser = (SysUser) session.//返回的对象需要强转成对应的类
selectOne("SysUserMapper.selectOne"//对应Mapper.xml里的namespace属性
, s);//这里的参数就是对应的Mapper的#{}里要传的值
2.增
SqlSession session = sqlSessionFactory.openSession();
try {
SysUser s = new SysUser();
//s.setId(1L);
s.setName("pink");
s.setLoginName("Bob");
s.setPassword("123");
//s.setAvatar("21.png");
int i = session.//这里的insert返回一个int类型的值
insert("SysUserMapper.insert"//对应Mapper.xml里的namespace属性
, s);//这里的参数就是对应的Mapper的#{}里要传的值
session.commit();//强制事务管理,需要调用提交方法
System.out.println(i);
} finally {session.close();}
3.改
SqlSession session = sqlSessionFactory.openSession();
try {
SysUser s = new SysUser();
s.setId(3L);
s.setLoginName("Dylan");
s.setName("Bob");
s.setPassword("121");
s.setAvatar("bd.png");
int i = session.//返回的对象需要强转成对应的类
update("SysUserMapper.update"//对应Mapper.xml里的namespace属性
, s);//这里的参数就是对应的Mapper的#{}里要传的值
session.commit();
} finally {session.close();}
4.删一个
SqlSession session = sqlSessionFactory.openSession();
try {
SysUser s = new SysUser();
s.setId(4L);
int i = session.//返回的对象需要强转成对应的类
delete("SysUserMapper.delete"//对应Mapper.xml里的namespace属性
, s);//这里的参数就是对应的Mapper的#{}里要传的值
session.commit();//强制事务管理,需要调用提交方法
} finally {session.close();}
5.批量删
public static void deleteAll(SqlSessionFactory sqlSessionFactory){
SqlSession session = sqlSessionFactory.openSession();
try {
List<Long> idList = new ArrayList<Long>();
idList.add(7L);
int i = session.//返回一个int类型表示是否成功
delete("SysUserMapper.deleteAll"//对应Mapper.xml里的namespace属性
, idList);//这里的参数就是对应的Mapper的#{}里要传的值
session.commit();//强制事务管理,需要调用提交方法
} finally {session.close();}
}
6.查一个,但返回的是List
SqlSession session = sqlSessionFactory.openSession();
try {
SysUser s = new SysUser();
s.setId(1L);
s.setLoginName("Bob");
s.setName("pink");
s.setPassword("21");
List<SysUser> result =
session.//返回的对象需要强转成对应的类
selectList("SysUserMapper.selectOneByList"//对应Mapper.xml里的namespace属性
, s);//这里的参数就是对应的Mapper的#{}里要传的值
if(result != null && result.size() > 0){
for(SysUser sysUser : result){
System.out.println(sysUser);
}
}
} finally {session.close();}
7.条件语句查多个,返回一个List
SqlSession session = sqlSessionFactory.openSession();
try {
SysUser s = new SysUser();
//s.setId(1L);
s.setLoginName("Bob");
s.setName("pink");
s.setPassword("123");
List<SysUser> result = session.//返回的对象需要强转成对应的类
selectList("SysUserMapper.query"//对应Mapper.xml里的namespace属性
, s);//这里的参数就是对应的Mapper的#{}里要传的值
if(result != null && result.size() > 0){
for(SysUser sysUser : result){
System.out.println(sysUser);
}
}else{
System.out.println("查到0");
}
} finally {session.close();}
8.in条件查询多个,返回List
SqlSession session = sqlSessionFactory.openSession();
try {
List<Long> idList = new ArrayList<Long>();
idList.add(1L);
idList.add(2L);
idList.add(3L);
List<SysUser> result = session.//返回的对象需要强转成对应的类
selectList("SysUserMapper.selectSysUserIn"//对应Mapper.xml里的namespace属性
, idList);//这里的参数就是对应的Mapper的#{}里要传的值
if(result != null && result.size() > 0){
System.out.println("查询到的对象数量 = " + result.size());
for(SysUser sysUser : result){
System.out.println(sysUser);
}
}
} finally {session.close();}