首先给大家展示一下Maven上的构建的Mybatis 的框架是什么样子的。
源码地址:链接:http://pan.baidu.com/s/1geYfipX 密码:dcnk
要求:默认你已经安装了 Myeclipse 和 Maven插件,没有安装的百度一下,先安装这两个东西。
好了,首先在数据库中创建一张表,数据库采用的mysql 可以将下边的文件直接导入数据库就行
Sql.txt 是在mysql中创建的。
drop DATABASE mybatisdemo
CREATE DATABASE mybatisdemo DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
DROP table t_user
CREATE TABLE mybatisdemo.t_user ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) DEFAULT NULL COMMENT '用户名称' , birthday DATE DEFAULT NULL COMMENT '生日', sex CHAR(2) DEFAULT NULL COMMENT '性别', address VARCHAR(256) DEFAULT NULL COMMENT '地址' );
INSERT INTO mybatisdemo.t_user (username,birthday,sex,address) VALUES ('小A','2015-06-27','2','北京'), ('小B','2015-06-27','2','北京'), ('小C','2015-06-27','1','北京'), ('小D','2015-06-27','2','北京');
select *from mybatisdemo.t_user |
先搭建maven环境
然后在pom.xml中写入依赖,这就是maven中packaging是jar的创建方式。
Pom.xml文件(里边有很多是用不到的,但是大项目中基本就是这些)
<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.huayu.mybatis</groupId> <artifactId>mybatis</artifactId> <version>0.0.1-SNAPSHOT</version>
<!-- 集中定义依赖版本号 --> <properties> <junit.version>4.12</junit.version> <spring.version>4.1.3.RELEASE</spring.version> <mybatis.version>3.2.8</mybatis.version> <mybatis.spring.version>1.2.2</mybatis.spring.version> <mybatis.paginator.version>1.2.15</mybatis.paginator.version> <mysql.version>5.1.32</mysql.version> <slf4j.version>1.6.4</slf4j.version> <jackson.version>2.4.2</jackson.version> <druid.version>1.0.9</druid.version> <httpclient.version>4.3.5</httpclient.version> <jstl.version>1.2</jstl.version> <servlet-api.version>2.5</servlet-api.version> <jsp-api.version>2.0</jsp-api.version> <joda-time.version>2.5</joda-time.version> <commons-lang3.version>3.3.2</commons-lang3.version> <commons-io.version>1.3.2</commons-io.version> <commons-net.version>3.3</commons-net.version> <pagehelper.version>3.4.2</pagehelper.version> <jsqlparser.version>0.9.1</jsqlparser.version> <commons-fileupload.version>1.3.1</commons-fileupload.version> <jedis.version>2.7.2</jedis.version> <solrj.version>4.10.3</solrj.version> <freemarker.version>2.3.23</freemarker.version> <quartz.version>2.2.2</quartz.version> </properties> <dependencies> <!-- 时间操作组件 --> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>${joda-time.version}</version> </dependency> <!-- Apache工具组件 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${commons-lang3.version}</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>${commons-io.version}</version> </dependency> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>${commons-net.version}</version> </dependency> <!-- Jackson Json处理工具包 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <!-- httpclient --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>${httpclient.version}</version> </dependency> <!-- 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <!-- 日志处理 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- Mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatis.spring.version}</version> </dependency> <dependency> <groupId>com.github.miemiedev</groupId> <artifactId>mybatis-paginator</artifactId> <version>${mybatis.paginator.version}</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>${pagehelper.version}</version> </dependency> <!-- MySql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- 连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <!-- JSP相关 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>${servlet-api.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>${jsp-api.version}</version> <scope>provided</scope> </dependency> <!-- 文件上传组件 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>${commons-fileupload.version}</version> </dependency> <!-- Redis客户端 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>${jedis.version}</version> </dependency> <!-- solr客户端 --> <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>${solrj.version}</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>${freemarker.version}</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>${quartz.version}</version> </dependency> </dependencies>
<build> <finalName>${project.artifactId}</finalName> <plugins> <!-- 资源文件拷贝插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.7</version> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- java编译插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- 配置Tomcat插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> </plugin> </plugins> </build> </project>
|
SqlMapConfig.xml文件
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEconfiguration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration> <propertiesresource="jdbc.properties"></properties>
<typeAliases> <typeAliastype="cn.huayu.mybatis.pojo.User"alias="User"/> </typeAliases>
<!-- 和spring整合后 environments配置将废除 配置环境,数据库连接-->
<environmentsdefault="development"> <environmentid="development"> <!-- 使用jdbc事务管理,事务控制由mybatis管理--> <transactionManagertype="JDBC"/> <!-- 数据库连接池,由mybatis管理--> <dataSourcetype="POOLED"> <propertyname="driver"value="${jdbc.driver}"/> <propertyname="url"value="${jdbc.url}"/> <propertyname="username"value="${jdbc.username}"/> <propertyname="password"value="${jdbc.password}"/> </dataSource> </environment> </environments>
<!-- 加载映射文件 --> <mappers> <mapperresource="UserDaoMaper.xml"/> </mappers> </configuration> |
UserDaoMapper.xml
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEmapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace命名空间,作用就是对sql进行分类化的管理,理解为sql隔离 注意:使用mapper代理开发时,namespace有特殊作用 --> <!-- <mapper namespace="test"> --> <!-- 可以不用使用实现类了,直接调用接口--> <mappernamespace="cn.huayu.mybatis.dao.UserDao"> <!-- 在映射文件中配置很多sql语句 --> <!-- 需求:通过Id查询用户表的记录 --> <!-- 通过SELECT执行数据库查询 id:标识映射文件中的sql,称为statement的id; 将sql语句封装在mapperStatement的对象中,所以Id称为Statement的id; parameterType:指定输入参数的类型,这里指定int型 #{}:表示一个占位符; #{id}:其中Id表示接收输入的参数,参数名称就是Id,如果输入参数是简单类型,#{}中的参数名可以任意,可以是value或者其它名称; resultType:指定sql输出结果所映射的java对象类型,select指定resultType表示将单条记录映射成java对象。 --> <selectid="findUserById"parameterType="int"resultType="cn.huayu.mybatis.pojo.User"> select * from t_user where id=#{id} </select> <!-- 根据用户名称模糊查询用户信息,可能返回多条数据 resultType:指定的就是单条记录所映射的java类型; ${}:表示拼接sql字符串,将接收到的参数内容不加任何修饰拼接在sql中. 使用${}拼接sql,可能会引起sql注入 ${value}:接收输入参数的内容,如果传入的是简单类型,${}中只能使用value --> <selectid="findUserByName"parameterType="java.lang.String"resultType="cn.huayu.mybatis.pojo.User"> select * from t_user where username LIKE '%${value}%' </select> <!-- 添加用户 parameterType:指定输入的参数类型是pojo(包括用户信息); #{}中指定pojo的属性名称,接收到pojo对象的属性值 ,mybatis通过OGNL(类似struts2的OGNL)获取对象的属性值 --> <insertid="insertUser"parameterType="user"> <!-- 将insert插入的数据的主键返回到User对象中; select last_insert_id():得到刚insert进去记录的主键值,只适用于自增主键; keyProperty:将查询到的主键值,设置到parameterType指定的对象的那个属性 order:select last_insert_id()执行顺序,相对于insert语句来说它的执行顺序。 resultType:指定select last_insert_id()的结果类型; --> <selectKeykeyProperty="id"order="AFTER"resultType="java.lang.Integer"> select last_insert_id() </selectKey> insert into t_user (username,sex,address) values(#{username},#{sex},#{address}) <!--
使用mysql的uuid(),实现非自增主键的返回。 执行过程:通过uuid()得到主键,将主键设置到user对象的Id的属性中,其次,在insert执行时,从user对象中取出Id属性值;
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String"> select uuid() </selectKey> insert into t_user (id,username,birthday,sex,address) values(#{id},#{username},#{birthday},#{sex},#{address}) -->
</insert> <!-- 删除用户 根据ID删除用户,需要输入Id值 -->
<deleteid="deleteUser"parameterType="java.lang.Integer"> delete from t_user where id=#{id} </delete>
<!-- 更新用户 需要传入用户的Id和用户的更新信息 parameterType:指定User对象,包括Id和用户的更新信息,注意:Id是必须存在的 #{id}:从输入的User对象中获取Id的属性值 --> <updateid="updateUser"parameterType="user"> update t_user set username=#{username},sex=#{sex},address=#{address} where id=#{id} </update>
</mapper>
|
jdbc.properties
##mysql autoReconnect keyishixianfuwuqi meiyoulianjie keyi dengdailianjiebuhuidangji jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc\:mysql\://localhost\:3306/mybatisdemo?useUnicode\=true&characterEncoding\=UTF-8&autoReconnect\=true jdbc.username=root jdbc.password=root
|
log4j.properties
# Global logging configuration #\u5728\u5F00\u53D1\u7684\u73AF\u5883\u4E0B\uFF0C\u65E5\u5FD7\u7EA7\u522B\u8981\u8BBE\u7F6E\u6210DEBUG\uFF0C\u751F\u4EA7\u73AF\u5883\u8BBE\u7F6E\u6210info\u6216error log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p[%t]-%m%n |
UserDao
/* * @(#)UserDao.java 2017-7-12下午2:21:06 * mybatis * Copyright 2017 Thuisoft, Inc. All rights reserved. * THUNISOFT PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package cn.huayu.mybatis.dao;
import cn.huayu.mybatis.pojo.User;
/** * UserDao * @author huayu * @version 1.0 * */ public interface UserDao {
/** * 根據用户id查询数据 */
public User findUserById(int id);
/** * 增添数据 * */ public void insertUser(User user); /** * 更新数据 */ public void updateUser(User user); /** * 根据id删除数据 */ public void deleteUser(int id); }
|
UserDaoImpl
/* * @(#)UserDaoImpl.java 2017-7-12下午2:10:58 * mybatis * Copyright 2017 Thuisoft, Inc. All rights reserved. * THUNISOFT PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package cn.huayu.mybatis.impl;
import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory;
import cn.huayu.mybatis.dao.UserDao; import cn.huayu.mybatis.pojo.User;
/** * UserDaoImpl * @author huayu * @version 1.0 * */ public class UserDaoImpl implements UserDao{
private SqlSessionFactory sqlsessionfactory ; public UserDaoImpl(SqlSessionFactory sqlSessionFactory){ this.sqlsessionfactory =sqlSessionFactory; }
/** (non-Javadoc) * @see cn.huayu.mybatis.dao.UserDao#queryUserByid(java.lang.Long) */
@Override public User findUserById(int id) { // TODO Auto-generated method stub SqlSession sqlSession =sqlsessionfactory.openSession(); User user =sqlSession.selectOne("test.findUserById",id); sqlSession.close(); return user; } /** (non-Javadoc) * @see cn.huayu.mybatis.dao.UserDao#saveUser(cn.huayu.mybatis.pojo.User) */ @Override public void insertUser(User user) { SqlSession sqlSession =sqlsessionfactory.openSession(); sqlSession.insert("test.insertUser",user); sqlSession.commit(); sqlSession.close(); } /** (non-Javadoc) * @see cn.huayu.mybatis.dao.UserDao#updateUser(cn.huayu.mybatis.pojo.User) */ @Override public void updateUser(User user) { SqlSession sqlSession =sqlsessionfactory.openSession(); sqlSession.update("test.updateUser",user); sqlSession.commit(); sqlSession.close(); } /** (non-Javadoc) * @see cn.huayu.mybatis.dao.UserDao#deleteUserById(java.lang.Long) */ @Override public void deleteUser(int id) { SqlSession sqlSession =sqlsessionfactory.openSession(); sqlSession.delete("test.deleteUser",id); sqlSession.commit(); sqlSession.close(); } } |
User
package cn.huayu.mybatis.pojo;
import java.util.Date;
/** * User * @authorhuayu * @version 1.0 * */ public class User { // 属性名称和数据库字段名称保持一致 private Integerid; // 姓名 private Stringusername; // 性别 private Stringsex; // 地址 private Stringaddress; // 生日 private Datebirthday;
public Integer getId() { returnid; }
public void setId(Integer id) { this.id = id; }
public String getUsername() { returnusername; }
public void setUsername(String username) { this.username = username; }
public String getSex() { returnsex; }
public void setSex(String sex) { this.sex = sex; }
public String getAddress() { returnaddress; }
public void setAddress(String address) { this.address = address; }
public Date getBirthday() { returnbirthday; }
public void setBirthday(Date birthday) { this.birthday = birthday; }
@Override public String toString() { return"User [id=" +id +", username=" +username +", sex=" +sex + ", address=" +address +", birthday=" +birthday +"]"; }
}
|
testUser
/* * @(#)testUser.java 2017-7-12下午2:18:11 * mybatis * Copyright 2017 Thuisoft, Inc. All rights reserved. * THUNISOFT PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package cn.huayu.mybatis;
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; import org.junit.Before; import org.junit.Test;
import cn.huayu.mybatis.dao.UserDao; import cn.huayu.mybatis.pojo.User;
/** * testUser * @author huayu * @version 1.0 * */
public class testUser { private UserDao userdao; @Before public void setUp() throws Exception { String resource = "sqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// userdao = new userdaoImpl(sqlSessionFactory); //使用动态代理方式省略impl实现类 SqlSession session= sqlSessionFactory.openSession(); userdao= session.getMapper(UserDao.class);
} //测试查询 @Test public void testQueryUserById() { User user = userdao.findUserById(1); System.out.println(user); } //测试插入 @Test public void testSaveUser(){ User user =new User(); user.setUsername("秦孝公"); user.setSex("男"); user.setAddress("陕西"); userdao.insertUser(user); } //测试删除 @Test public void testdeleteUser(){ userdao.deleteUser(19); } //测试更新 @Test public void testUpdateUser(){ User user =new User(); user.setAddress("安徽"); user.setUsername("商鞅"); user.setId(18); userdao.updateUser(user); } } |
运行testUser。
mybatis 实际上是可以省略实现类的,在这我把实现类也给大家贴出来了,方便大家测试,Mybatis 和Hibernate相比,体现的优势其实也在一定程度上体现在省略实现类。
如果大家有疑问可以随时联系我(qq:742002761一般都在线)