只要文件在有符号的src包下 ,就不必写src 这节目录
// 假如我将mybatis-config.xml放到comm.icss.control包下,那么我就得
// String config = "com/icss/control/mybatis-config.xml"; (省略src)
String config = "mybatis-config.xml";
//官网模板String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(config);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession openSession = sqlSessionFactory.openSession();
Object oneUser = openSession.selectOne("getUserById", 1);
System.out.println(oneUser);
2. 执行xml哪个SQL语句 并先知道它的id
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession openSession = sqlSessionFactory.openSession();
Object oneUser = openSession.selectOne("getUserById", 1);
// Object oneUser = openSession.selectOne("com.icss.mapping.user.getUserById", 1); 这样就更加精准了,更唯一了,因为如果只写"getUserById",可能还有一个XML里的SQL id也叫这个getUserById
System.out.println(oneUser);
3. XML 里SQL的 标签 #{} 等于JDBC的占位符 ?
//resultType->查询后返回的结果是什么类型 , parameterType表示查询是传入的参数是什么类型,
<select id="getUserById" resultType="com.icss.entity.User" parameterType="int">
select * from user where id=#{id}
</select>
//parameterType表示传入占位符#{}的是User类型。 切记,#{pwd2} , #{user2} 和实体类user的成员变量名字要相同,框架会帮你自动准确填入,不然你传的user.id,user.pwd不知填到哪个占位符里
<update id="updateByUser" parameterType="com.icss.entity.User">
UPDATE user set user=#{user2},pwd=#{pwd2} where user=#{user2}
</update>
<insert id="insertByUser" parameterType="com.icss.entity.User" >
insert into user values(#{id},#{user2},#{pwd2},#{status},#{role})
</insert>
<delete id="deleteByid" parameterType="int">
delete from user where id =#{id}
</delete>
4.查询返回的结果是集合的 情况
<!-- 因为要传入两个参数,但 parameterType只能写一个东西的,所以写map-->
<select id="listByPage" resultMap="userlist" parameterType="map">
//注意:这个占位符#{}是有讲究的,#{index}, #{pagesize} 意味着,方法调用那边也要起这个名字,框架才能准确对应起来 。具体请看下面图片
select * from user limit #{index},#{pagesize}
</select>
//上面查询语句有一个id,下面集合也要有一个id,各自有名字才能对应起来 。上面的resultMap填的就是下面的集合的id 名字
//type代表集合的成员类型
<resultMap id="userlist" type="com.icss.entity.User">
// column对应的是mysql数据库的那个列名
//property对应的是实体类User 里的成员属性名
<result column="id" property="id"/>
<result column="user" property="user2"/>
<result column="pwd" property="pwd2"/>
<result column="status" property="status"/>
<result column="role" property="role" />
</resultMap>
工具类
package com.icss.util;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SQLSessionUtil {
private static SqlSessionFactory factory=null;
// static
static Reader read=null;
static{
String config="mybatis-config.xml";
try {
read= Resources.getResourceAsReader(config);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*
* @return
* 单例设计模式,只得到一个工厂对象
*/
private static SqlSessionFactory getSqlSessionFacory(){
if(factory==null){
factory =new SqlSessionFactoryBuilder().build(read);
}
return factory;
}
/***
* 封装一个得到 SqlSession的对象
*
*/
public static SqlSession getSqlSession(){
return getSqlSessionFacory().openSession();
}
}