一.准备
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 */@Overridepublic 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 SYSUSERWHERE 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();}