Mybatis入门程序一
Mybatis的dao层开发结构有两种,一种是原始dao层方式,一种是mapper代理方式。两种方式分别给出如下例子:
目录结构:
配置文件
SqlmapperConfig.xml
userMapper.xml
<mapper namespace="test">
<!-- 根据id查询用户信息 -->
<!--
id:唯一标识一个statement
#{}:表示一个占位符,如果#{}中传入简单类型的参数,#{}中的名称随意
parameterType:输入参数的类型,通过#{}接收parameterType输入的参数
resultType:输出结果类型,不管返回是多条还是单条,指定单条记录映射的pojo类型
-->
<!-- <select id="findUserById"parameterType="int"resultType="cn.itcast.mybatis.po.User">
SELECT * FROM USER WHERE id=#{id}
</select> -->
<!-- 根据用户名查询该用户是否注册过-->
<select id="select_username"parameterType="String" resultType="Integer">
select count(1) from registerwhere username= #{username}
</select>
<!-- 输入参数的类型要一样 -->
<select id="select_article"parameterType="String" resultType="com.zhangyike.bean.ArticleBean">
select
article.articleid,article.articlecontent,article.articlename,article.keyworlds,
visit.hit,
praise.praisecount
from article,visit,praise
where article.articleid =visit.articleid and article.articleid = praise.articleid and article.articleid= #{articleid}
</select>
<!-- 更改点赞量 -->
<update id="update_praisecount"parameterType ="com.zhangyike.bean.ArticleBean">
UPDATE praise SET praisecount= praisecount+ #{praisecount} WHERE articleid = #{articleid}
</update>
<delete id="deleteUser"parameterType="String">
delete from register where username=#{id}
</delete>
<insert id="insert_user"parameterType="com.zhangyike.bean.User">
INSERT INTO register(username,password,telephone)VALUES (#{username}, #{password}, #{telephone})
</insert>
</mapper>
工具类:
public class SessionUtils {
private staticSqlSessionFactory sqlSessionFactory;
static{
try {
InputStreamstream = Resources.getResourceAsStream("sqlMapperConfig.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
}catch (IOException e) {
System.out.println("加载配置文件失败:" +e.getMessage());
}
}
public staticSqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
public staticvoid closeSqlSession(SqlSessionsqlSession){
sqlSession.close();
}
}
原始dao层使用方式:
public static void main(String[] args){
SqlSessionsession = SessionUtils.getSqlSession();
ArticleBeanone = null;
try{
one= (ArticleBean)session.selectOne("select_article","1");
}catch(Exception e){
e.printStackTrace();
}finally{
session.close();
}
System.out.println(one);
}
Mapper代理方式:
写一个mapper接口类,mapper的namespace就是接口的全类名,接口中的抽象方法就是userMapper.xml的id就是接口中的抽象方法名。
public static void main(String[] args) {
SqlSessionsqlsession = SessionUtils.getSqlSession();
UserMapperuser = sqlsession.getMapper(UserMapper.class);
ArticleBeanselect_article = user.select_article(1+"");
sqlsession.commit();
sqlsession.close();
System.out.println(select_article);
}
总结:
原始dao的方式用sqlsession的方法,传递一个mapper中的id,以及参数就可以操作数据库,而mapper代理方式根据sqlsession的getMapper()的方法,得到mapper接口对象,从而调用接口中的方法。