【MyBatis学习01】一个简单入门实例
来源:互联网 发布:家族企业 知乎 编辑:程序博客网 时间:2024/05/28 16:28
本文博客地址:http://blog.csdn.net/soonfly/article/details/63323701 (转载请注明出处)
mybatis框架是一个持久层框架,它提供一种“半自动化”的ORM实现。mybatis主要关注POJO(Plain Old Java Objects,普通的Java 对象)与SQL之间的映射关系,对于SQL语句,需要自己编写。 Mybatis的使用非常简单,下面通过一个小示例来入门mybatis 。
一、准备工作:
1、创建java项目
这里我们选择Dynamic Web Project(动态web项目),当然也可以选择普通的Java Project。
在创建的过程中,我们给source folder增加一个config目录用于放置配置文件。在开发中,要养成归类的习惯。
2、创建Mysql库、表
创建库
CREATE DATABASE `tangwenmingdb` /*!40100 DEFAULT CHARACTER SET utf8 */
在tangwenmingdb
中创建分类用户表user
CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(50) DEFAULT NULL, `password` varchar(50) DEFAULT NULL, `salt` varchar(50) DEFAULT NULL, `sex` smallint(1) DEFAULT NULL COMMENT '0-未知 1-男 2-女', `address` varchar(50) DEFAULT NULL, `cellphone` varchar(30) DEFAULT NULL, `email` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8
二、在Java项目中导入mybatis相关包以及mysql连接组件
mybatis需要jar包:mybatis-3.3.0.jar和几个依赖包,全部导入到工程中即可
mysql驱动jar包:mysql-connector-java-5.1.26-bin.jar
日志记录jar包:log4j-core-2.2.jar和依赖包
记得拷贝log4j的配置文件log4j.properties至config目录下
(相关包下载请点击)
三、创建mybatis配置文件sqlMapConfig.xml及数据库连接配置文件
db.properties内容:
url=jdbc:mysql://localhost:3306/tangwenmingdbuser=rootpassword=yjcsxdldriverClass=com.mysql.jdbc.Driver
sqlMapConfig.xml内容由三部分组成:
1、typeAliases:设置pojo别名
2、配置mybatis运行环境
3、加载mapper映射
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <!-- 引入外部db连接配置文件 --> <properties resource="db.properties"></properties> <!-- 1、typeAliases:设置pojo别名 --> <typeAliases> <!-- 方式1:针对单个别名的定义。type:类型的路径; alias:别名 --> <!-- <typeAlias type="twm.mybatisdemo.pojo.User" alias="User"/> --> <!-- 方式2:自动扫描,将JAVA类的类名作为类的类别名 --> <package name="twm.mybatisdemo.pojo" /> </typeAliases> <!-- 2、配置mybatis运行环境 --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"> </transactionManager> <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI --> <!-- POOLED 表示支持JDBC数据源连接池 --> <!-- UNPOOLED 表示不支持数据源连接池 --> <!-- JNDI 表示支持外部数据源连接池 --> <dataSource type="POOLED"> <property name="driver" value="${driverClass}" /> <property name="url" value="${url}" /> <property name="username" value="${user}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <!-- 3、加载mapper映射 --> <!-- 第一种方式: 一个个指定接口文件及配置文件位置 <mappers> <mapper resource="twm/mybatisdemo/mapper/User.xml" /> <mapper class="twm.mybatisdemo.mapper.UserMapper"/> </mappers> --> <!-- 第二种方式: 指定目录加载,要求接口文件与xml配置在同一个目录下 --> <mappers> <package name="twm/mybatisdemo/mapper" /> </mappers> </configuration>
四、创建POJO,即:数据实体对象
package twm.mybatisdemo.pojo;public class User { Integer id; String username; String password; String salt; Short sex; String address; String cellphone; String email; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getSalt() { return salt; } public void setSalt(String salt) { this.salt = salt; } public Short getSex() { return sex; } public void setSex(Short sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getCellphone() { return cellphone; } public void setCellphone(String cellphone) { this.cellphone = cellphone; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public User() { } public User(String username, String password, String salt, Short sex, String address, String cellphone, String email) { super(); this.username = username; this.password = password; this.salt = salt; this.sex = sex; this.address = address; this.cellphone = cellphone; this.email = email; } @Override public String toString() { return "姓名:"+username+",性别:"+sex+",地址:"+address+",邮箱:"+email; }}
五、创建映射器接口UserMapper.java及映射器配置文件UserMapper.xml
映射器接口文件 UserMapper.java:
package twm.mybatisdemo.mapper;import java.util.List;import org.apache.ibatis.annotations.Param;import twm.mybatisdemo.pojo.User;public interface UserMapper { /** * 新增用戶 * * @param user * @return * @throws Exception */ public int insert(User user) throws Exception; /** * 修改用戶 * * @param user * @param id * @return * @throws Exception */ public int update(User user) throws Exception; /** * 刪除用戶 * * @param id * @return * @throws Exception */ public int delete(int id) throws Exception; /** * 根据id查询用户信息 * * @param id * @return * @throws Exception */ public User selectById(int id) throws Exception; /** * 查询所有的用户信息 * * @return * @throws Exception */ public List<User> selectAll() throws Exception; /** * 根据用户名模糊查询用户 * @param searchkey * @return * @throws Exception */ public List<User> findByName(@Param(value="searchkey") String searchkey) throws Exception;}
映射配置文件UserMapper.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="twm.mybatisdemo.mapper.UserMapper"> <!-- 自定义返回结果集 --> <resultMap id="userMap" type="twm.mybatisdemo.pojo.User"> <id column="id" property="id" jdbcType="INTEGER" /> <result property="username" column="username" javaType="String" jdbcType="VARCHAR"></result> <result property="password" column="password" javaType="String" jdbcType="VARCHAR"></result> <result property="salt" column="salt" javaType="String" jdbcType="VARCHAR"></result> <result property="sex" column="sex" javaType="Short" jdbcType="INTEGER"></result> <result property="address" column="address" javaType="String" jdbcType="VARCHAR"></result> <result property="cellphone" column="cellphone" javaType="String" jdbcType="VARCHAR"></result> <result property="email" column="email" javaType="String" jdbcType="VARCHAR"></result> </resultMap> <!-- useGeneratedKeys 取值范围true|false 默认值是:false。 含义:设置是否使用JDBC的getGenereatedKeys方法(如:Mysql自增)获取主键并赋值到keyProperty设置的模型属性中 --> <!-- #{}:表示一个占位符,用来接收输入参数的。 --> <insert id="insert" useGeneratedKeys="true" keyProperty="id"> insert into user (username,password,salt,sex,address,cellphone,email) values (#{username},#{password},#{salt},#{sex},#{address},#{cellphone},#{email}) </insert> <update id="update"> update user set username=#{username},password=#{password},salt=#{salt},sex=#{sex},address=#{address}, cellphone=#{cellphone},email=#{email} where id=#{id} </update> <delete id="delete" parameterType="int"> delete from user where id=#{id} </delete> <select id="selectById" parameterType="int" resultMap="userMap"> select * from user where id=#{id} </select> <select id="selectAll" resultMap="userMap"> select * from user </select></mapper>
六、创建生成Sqlsession的辅助类
package twm.mybatisdemo.Assist;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 SqlSessionAssist { public static SqlSessionFactory sessionFactory; static { try { Reader reader = Resources.getResourceAsReader("sqlMapConfig.xml"); // InputStream inputStream = Resources.getResourceAsStream("mybatis.cfg.xml"); sessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (Exception e) { e.printStackTrace(); } } public static SqlSession getSession() { return sessionFactory.openSession(); }}
七、调用 Run as Java Application
public class firstTest { public static void main(String[] args) throws Exception { SqlSession session = SqlSessionAssist.getSession(); //session.select("select", 38); /*获取user O/R映射关系*/ UserMapper usermapper=session.getMapper(UserMapper.class); User aPerson; /*1、增加单条记录*/ aPerson=new User("郭灭","123456", "aX3Qcs", (short)1, "济南云龙客栈", "18911110000", "guom@gulong.com"); /*insert返回操作记录的数量,插入一条记录即为:1。*/ usermapper.insert(aPerson);//接口映射方式 //session.insert("insert",aPerson);//直接采用DAO方式 System.out.println("1、增加单条记录:插入用户["+aPerson+"]成功。"); /*2、增加单条记录,并返回插入ID*/ aPerson=new User("高天仪","123456", "aX3Qcs", (short)2, "北冥山庄", "18911110000", "gaotianyi@gulong.com"); /*xml配置了useGeneratedKeys="true" keyProperty="id",则会将插入后的主键填充到参数里的user对象的主键中。 *aPerson.getId()返回插入记录的主键*/ usermapper.insert(aPerson); System.out.println("2、增加单条记录,并返回插入ID:插入用户["+aPerson+"]成功。ID:"+aPerson.getId()); session.commit();/*提交*/ /*3、读取单条记录*/ User tmpuser=usermapper.selectById(aPerson.getId());//接口映射方式 //User tmpuser=session.selectOne("selectById", aPerson.getId());//直接采用DAO方式 System.out.println("3、读取单条记录:"+tmpuser+"。ID:"+tmpuser.getId()); /*4、修改单条记录*/ tmpuser.setAddress("锦绣山庄"); tmpuser.setUsername("三笑将军"); usermapper.update(tmpuser); session.commit();/*提交*/ System.out.println("4、修改单条记录:"+tmpuser+"。ID:"+tmpuser.getId()); /*5、删除单条记录*/ usermapper.delete(tmpuser.getId()); session.commit();/*提交*/ System.out.println("5、删除单条记录:"+tmpuser); /*6、查询记录*/ List<User> userList=usermapper.findByName("灭"); System.out.println("6、查询记录:共找到"+userList.size()+"个用户"); /*End:关闭mybatis会话*/ session.close(); }}
运行后输出:
1、增加单条记录:插入用户[姓名:郭灭,性别:1,地址:济南云龙客栈,邮箱:guom@gulong.com]成功。
2、增加单条记录,并返回插入ID:插入用户[姓名:高天仪,性别:2,地址:北冥山庄,邮箱:gaotianyi@gulong.com]成功。ID:52
3、读取单条记录:姓名:高天仪,性别:2,地址:北冥山庄,邮箱:gaotianyi@gulong.com。ID:52
4、修改单条记录:姓名:三笑将军,性别:2,地址:锦绣山庄,邮箱:gaotianyi@gulong.com。ID:52
5、删除单条记录:姓名:三笑将军,性别:2,地址:锦绣山庄,邮箱:gaotianyi@gulong.com 6、查询记录:共找到1个用户
至此我们用mybatis完成了基础的增删改查操作。
本文博客地址:http://blog.csdn.net/soonfly/article/details/63323701 (转载请注明出处)
- 【MyBatis学习01】一个简单入门实例
- mybatis简单入门实例
- Mybatis入门最简单实例
- MyBatis入门学习(实例)
- netty入门学习(2)-一个简单的netty实例
- Mybatis 入门学习,简单例子
- Mybatis简单入门<学习随笔>
- mybatis:一个最简单的实例
- 一个简单的mybatis入门demo
- 一个简单的mybatis入门demo
- Ant学习--简单实例入门
- JSTL简单入门学习实例
- java学习笔记1 - Mybatis简单实例
- 三大框架学习:Struts2简单入门(通过一个简单的登陆实例详解)
- Mybatis学习教程—— Mybatis入门实例
- JMeter入门:02一个简单实例
- JMeter入门(2):一个简单实例
- MyBatis学习(一):一个简单的演示
- 第一天
- 用vbscript实现qq自动登陆
- Lettcode_516. Longest Palindromic Subsequence
- CCF CSP试题201312-2 ISBN号码
- tess4j失败的惨痛教训(日记文)
- 【MyBatis学习01】一个简单入门实例
- Ubuntu下安装Yaafe
- Python:Fatal error in launcher: Unable to create process using pip.exe
- 框架模式-MVP
- 构造队列
- 进制转换
- JDK1.6中线程池更好了,有allowCoreThreadTimeOut
- Python_05
- 第四届河南省ACM 表达式求值 栈