Mybatis3配置方法

 一.准备

  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();}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值