设为首页 收藏本站
查看: 766|回复: 0

[经验分享] mybatis应用实例学习

[复制链接]

尚未签到

发表于 2016-11-25 07:09:42 | 显示全部楼层 |阅读模式
MyBatis下载地址: http://code.google.com/p/mybatis/
搭建第一个mybatis应用
创建系统所需数据库


--
--
数据库 tb_user
--

drop table if exists tb_user;
create table tb_user(
id
int primary key auto_increment comment '主键',
username
varchar(40) not null unique comment '用户名',
password
varchar(40) not null comment '密码',
email
varchar(40) comment '邮件',
age
int  comment '年龄',
sex
char(2) not null comment '性别'
);



项目结构图:
DSC0000.jpg

实体类User


package com.icreate.entity;
/**
*
*
*  
@version : 1.0
*  
*  
@author  : 苏若年              <a href="mailto:DennisIT@163.com">发送邮件</a>
*   
*  
@since   : 1.0        创建时间:    2013-4-9    上午11:15:50
*     
*  @function: TODO        
*
*/
public class User {
private int id;
private String username;
private String password;
private String sex;
private String email;
private int age;
//getter and setter     
}



 
方案一: 基于配置文件
数据dao接口


package com.icreate.dao;
import java.util.List;
import com.icreate.entity.User;
/**
*
*
*  
@version : 1.0
*  
*  
@author  : 苏若年              <a href="mailto:DennisIT@163.com">发送邮件</a>
*   
*  
@since   : 1.0        创建时间:    2013-4-9    上午11:36:34
*     
*  @function: TODO        
*
*/
public interface UserDao {
/**
* 新增用户
*
@param user
*
@return
*/
public int insert(User user);
/**
* 修改用户
*
@param user
*
@return
*/
public int update(User user);
/**
* 删除用户
*
@param userName
*
@return
*/
public int delete(String userName);
/**
* 查询所有用户
*
@return
*/
public List<User> selectAll();
/**
* 查询数据库中总记录条数
*
@return
*/
public int countAll();
/**
* 根据用户名查询用户
*
@param userName
*
@return
*/
public User findByUserName(String userName);
}



UserDaoMapper.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 namespace="com.icreate.dao.UserDao">
<select id="countAll" resultType="int">  <!-- 查询表中记录总数 -->
select count(*) c from tb_user;
</select>
<select id="selectAll" resultType="com.icreate.entity.User">    <!-- 查询表中的所有用户 -->
select * from tb_user order by username asc
</select>
<insert id="insert" parameterType="com.icreate.entity.User">    <!-- 向数据库中插入用户 -->
insert into tb_user(username,password,email,sex,age) values(#{username},#{password},#{email},#{sex},#{age})
</insert>
<update id="update" parameterType="com.icreate.entity.User">     <!-- 更新库中的用户 -->
update tb_user set username=#{username},password=#{password},email=#{email},sex=#{sex},age=#{age} where username=#{username}
</update>
<delete id="delete" parameterType="String">    <!-- 删除用户 -->
delete from tb_user where username=#{username}
</delete>
<select id="findByUserName" parameterType="String" resultType="com.icreate.entity.User"> <!-- 根据用户名查找用户 -->
select * from tb_user where username=#{username}
</select>
</mapper>


 
  需要注意的是,这里的id应该与UserDao中定义的方法名相同,sql语句结尾不能用分号
MyBatis-Configuration.xml文件

主测试类


package com.icreate.test;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import sun.security.krb5.internal.UDPClient;
import com.icreate.dao.UserDao;
import com.icreate.entity.User;
/**
*
*
*  
@version : 1.0
*  
*  
@author  : 苏若年              <a href="mailto:DennisIT@163.com">发送邮件</a>
*   
*  
@since   : 1.0        创建时间:    2013-4-9    上午11:58:03
*     
*  @function: TODO        
*
*/
public class MybatisHandler {
public static void main(String[] args) throws Exception {
String resource
= "MyBatis-Configuration.xml";    //mybatis配置文件的路径
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactoryBuilder builfer
= new SqlSessionFactoryBuilder();
SqlSessionFactory factory
= builfer.build(reader);
SqlSession session
= factory.openSession();
UserDao userDao
= session.getMapper(UserDao.class);
//创建对象
User user = new User();
user.setUsername(
"苏若年");
user.setPassword(
"dennisit");
user.setEmail(
"dennisit@163.com");
user.setSex(
"男");
user.setAge(
80);
//增加用户
//userDao.insert(user);
//查询数据库中记录总数
System.out.println("数据库中的记录数:" + userDao.countAll());

//根据用户名查找
User usn = userDao.findByUserName("苏若年");
if(null!=usn){
System.out.println(
"根据用户名查找的信息[" +usn.getId() + "," + usn.getUsername() + "," + usn.getEmail()+"]");
}
//更新用户
User updUser = new User();
updUser.setUsername(
"苏若年"); //更新用户是按照用户名查找,然后更新的.所以要修改的数据前后必须是同一个用户名
updUser.setEmail("update@163.com");
updUser.setPassword(
"update");
updUser.setAge(
20);
userDao.update(updUser);   
//执行更新操作
//查询所有用户记录
List<User> list = userDao.selectAll();
for(int i=0;i<list.size();i++){
User us
= list.get(i);
System.out.println(
"[" + us.getId() + "," + us.getUsername() + "," + us.getEmail()+"]");
}
userDao.delete(
"苏若年");
System.out.println(
"执行删除后数据库中的记录数:" + userDao.countAll());
session.commit();
}
}



 
程序运行结果


数据库中的记录数:1
根据用户名查找的信息[
1,苏若年,dennisit@163.com]
[
1,苏若年,update@163.com]
执行删除后数据库中的记录数:
0



 
参考文档: http://www.cnblogs.com/wushiqi54719880/archive/2011/07/26/2117601.html
 
方案二:基于Annotation

数据表与实体类不变,项目结构图
DSC0001.jpg

UserDao中使用Annotation


package com.icreate.dao;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.icreate.entity.User;
/**
*
*
*  
@version : 1.0
*  
*  
@author  : 苏若年              <a href="mailto:DennisIT@163.com">发送邮件</a>
*   
*  
@since   : 1.0        创建时间:    2013-4-9    上午11:36:34
*     
*  @function: TODO        
*
*/
public interface UserDao {
@Insert(
"insert into tb_user(username,password,email,sex,age) values(#{username},#{password},#{email},#{sex},#{age})")
public int insert(User user);
@Update(
"update tb_user set username=#{username},password=#{password},email=#{email},sex=#{sex},age=#{age} where username=#{username}")
public int update(User user);
@Delete(
"delete from tb_user where username=#{username}")
public int delete(String userName);
@Select(
"select * from tb_user ")
public List<User> selectAll();
@Select(
"select count(*) from tb_user")
public int countAll();
@Select(
"select * from tb_user where username=#{username}")
public User findByUserName(String userName);
}



MyBatis-Configuration.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">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/db_mybatis?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
</configuration>



DBHelper辅助类 


package com.icreate.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;
import com.icreate.dao.UserDao;
/**
*
*
*  
@version : 1.0
*  
*  
@author  : 苏若年              <a href="mailto:DennisIT@163.com">发送邮件</a>
*   
*  
@since   : 1.0        创建时间:    2013-4-9    下午02:36:43
*     
*  @function: 单例设计模式      
*
*/
public class DBHelper {
private static DBHelper dbHelper = new DBHelper();
private  SqlSessionFactory sqlSessionFactory = null;
private DBHelper(){
try {
String resource
= "MyBatis-Configuration.xml";    //mybatis配置文件的路径
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactoryBuilder builfer
= new SqlSessionFactoryBuilder();
sqlSessionFactory
= builfer.build(reader);
sqlSessionFactory.getConfiguration().addMapper(UserDao.
class);
}
catch (IOException e) {
e.printStackTrace();
}
}
public static DBHelper getInstance(){
return dbHelper;
}
public SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}



数据操作模拟类


package com.icreate.test;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import sun.security.krb5.internal.UDPClient;
import com.icreate.dao.UserDao;
import com.icreate.entity.User;
import com.icreate.util.DBHelper;
/**
*
*
*  
@version : 1.0
*  
*  
@author  : 苏若年              <a href="mailto:DennisIT@163.com">发送邮件</a>
*   
*  
@since   : 1.0        创建时间:    2013-4-9    上午11:58:03
*     
*  @function: TODO        
*
*/
public class MybatisHandler {
public static void main(String[] args) throws Exception {
SqlSession session
= DBHelper.getInstance().getSqlSession();
UserDao userDao
= session.getMapper(UserDao.class);
//创建对象
User user = new User();
user.setUsername(
"苏若年");
user.setPassword(
"dennisit");
user.setEmail(
"dennisit@163.com");
user.setSex(
"男");
user.setAge(
80);
//增加用户
        userDao.insert(user);
//查询数据库中记录总数
System.out.println("数据库中的记录数:" + userDao.countAll());

//根据用户名查找
User usn = userDao.findByUserName("苏若年");
if(null!=usn){
System.out.println(
"根据用户名查找的信息[" +usn.getId() + "," + usn.getUsername() + "," + usn.getEmail()+"]");
}
//更新用户
User updUser = new User();
updUser.setUsername(
"苏若年"); //更新用户是按照用户名查找,然后更新的.所以要修改的数据前后必须是同一个用户名
updUser.setEmail("update@163.com");
updUser.setPassword(
"update");
updUser.setAge(
20);
updUser.setSex(
"男");
userDao.update(updUser);   
//执行更新操作
//查询所有用户记录
List<User> list = userDao.selectAll();
for(int i=0;i<list.size();i++){
User us
= list.get(i);
System.out.println(
"[" + us.getId() + "," + us.getUsername() + "," + us.getEmail()+"]");
}
userDao.delete(
"苏若年");
System.out.println(
"执行删除后数据库中的记录数:" + userDao.countAll());
session.commit();
}
}



程序运行结果 


数据库中的记录数:1
根据用户名查找的信息[
2,苏若年,dennisit@163.com]
[
2,苏若年,update@163.com]
执行删除后数据库中的记录数:
0



 
参考文档: http://www.cnblogs.com/wushiqi54719880/archive/2011/07/26/2117614.html
在此感谢博友红枫落叶,笔者新接触mybatis,学习时得到落叶文章很大的帮助!
转载请注明出处:[http://www.cnblogs.com/dennisit/archive/2013/04/09/3010801.html]
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-305083-1-1.html 上篇帖子: mybatis学习笔记(二) 下篇帖子: Mybatis分库分表扩展插件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表