MyBatis入门(一)---基本使用

MyBatis入门(一)---基本使用

1、MyBatis简介

1.一、概述 html

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。 java

MyBatis 避免了几乎全部的 JDBC 代码和手动设置参数以及获取结果集。 mysql

MyBatis 能够对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 sql

1.二、ORM 数据库

orm工具的基本思想
不管是用过的hibernate,mybatis,你均可以法相他们有一个共同点:
1. 从配置文件(一般是XML配置文件中)获得 sessionfactory.
2. 由sessionfactory  产生 session
3. 在session 中完成对数据的增删改查和事务提交等.
4. 在用完以后关闭session 。
apache

5. 在java 对象和 数据库之间有作mapping 的配置文件,也一般是xml 文件。 session

 

2、环境搭建

2.一、所须要Jar包 mybatis

 要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中便可。 app

2.二、创建数据库与插入数据 框架

这里使用MySql数据库:

 

复制代码
CREATE TABLE `mybatis`.`user` ( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID', `name` VARCHAR(45) NOT NULL DEFAULT '无名氏' COMMENT '用户名', `age` TINYINT(3) NOT NULL DEFAULT 21 COMMENT '用户年龄', `birthday` DATETIME NOT NULL DEFAULT '1970-01-01 00:00:00' COMMENT '用户生日', `address` VARCHAR(256) NOT NULL DEFAULT '北京' COMMENT '用户地址', PRIMARY KEY (`id`)  COMMENT '') COMMENT = '用户表';
复制代码

 

insert into user(id,name,age,birthday,address) values(1,'张三',23,'1990-01-23 20:24:21','上海'),(2,'李四',18,'1986-12-23 12:13:11','广州'),(3,'张五',33,'1975-09-23 02:13:11','上海'),(4,'王六',27,'1984-11-01 11:23:14','重庆'),(5,'张三丰',108,'1971-01-02 02:12:11','武当');

2.三、创建Web项目把Jar包引入项目

 

3、创建配置文件,实体类,与接口

3.一、创建实体类

 

复制代码
/** * @Title: User.java * @Package com.pb.mybatis.po * @Description: TODO(用户类) * @author 刘楠 * @date 2015-10-26 下午5:42:13 * @version V1.0 */ package com.pb.mybatis.po; import java.util.Date; /** * @ClassName: User * @Description: TODO(用户类) * @author 刘楠 * @date 2015-10-26 下午5:42:13 * */ public class User { /** * id(用户ID) */ private int id; /** * name(用户名) */ private String name; /** *age (用户年龄) */ private int age; /** * birthday(用户生日) */ private Date birthday; /** * address (用户地址) */ private String address; /** * @return the id */ public int getId() { return id; } /** * @param id the id to set */ public void setId(int id) { this.id = id; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the age */ public int getAge() { return age; } /** * @param age the age to set */ public void setAge(int age) { this.age = age; } /** * @return the brithday */ public Date getBirthday() { return brithday; } /** * @param brithday the brithday to set */ public void setBirthday(Date birthday) { this.birthday = birthday; } /** * @return the address */ public String getAddress() { return address; } /** * @param address the address to set */ public void setAddress(String address) { this.address = address; } }
复制代码

 

3.二、写实体类接口

 

复制代码
/** * @Title: UserMapper.java * @Package com.pb.mybatis.dao * @Description: TODO(用一句话描述该文件作什么) * @author 刘楠 * @date 2015-10-26 下午5:45:13 * @version V1.0 */ package com.pb.mybatis.dao; import com.pb.mybatis.po.User; /** * @ClassName: UserMapper * @Description: TODO(用户类数据访问接口) * @author 刘楠 * @date 2015-10-26 下午5:45:13 * */ public interface UserMapper { /** * * @Title: selectUserById * @Description: TODO(根据用户ID查询) * @param id * @return User */ public User selectUserById(int id); }
复制代码

 

3.三、与db.properties

 db.properties

复制代码
#数据库基本配置 #驱动 driver=com.mysql.jdbc.Driver #链接url url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8 #用户名 username=root #密码 password=root
复制代码

3.四、创建映射文件与configuration.xml配置

 

 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命名空间要写接口的全路径 --> <mapper namespace="com.pb.mybatis.dao.UserMapper"> <!--ID要与接口中的方法名相同 parameterType传入的参数类型 resultType 返回的类型这里也User类的全路径--> <select id="selectUserById" parameterType="int" resultType="com.pb.mybatis.po.User"> select * from user where id=#{id} </select> </mapper>
复制代码

 

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> <!-- 加载资源文件 --> <properties resource="db.properties"/> <!--配置环境 --> <environments default="development"> <environment id="development"> <!--事务管理 --> <transactionManager type="JDBC"/> <!--数据源 经过Properties加载配置 --> <dataSource type="POOLED"> <!--驱动driver --> <property name="driver" value="${driver}"/> <!--链接URL --> <property name="url" value="${url}"/> <!--用户名 --> <property name="username" value="${username}"/> <!--密码 --> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!--创建映射 --> <mappers> <mapper resource="com/pb/mybatis/dao/UserMapper.xml"/> </mappers> </configuration>
复制代码

 

3.五、简单根据ID查询

 

复制代码
/** * @Title: Test1.java * @Package com.pb.mybatis.test * @Description: TODO(用一句话描述该文件作什么) * @author 刘楠 * @date 2015-10-26 下午5:55:54 * @version V1.0 */ package com.pb.mybatis.test; 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.pb.mybatis.dao.UserMapper; import com.pb.mybatis.po.User; /** * @ClassName: Test1 * @Description: TODO(测试类) * @author 刘楠 * @date 2015-10-26 下午5:55:54 * */ public class Test1 { //Session工厂 static SqlSessionFactory sqlSessionFactory=null; //Session static SqlSession session=null; //字符流 static Reader reader=null; public static void main(String[] args) { selectById(); } /** * * @Title: selectById * @Description: TODO(根据ID查找用户) void */ public static void selectById(){ //加载配置文件 try { reader=Resources.getResourceAsReader("configuration.xml"); //创建SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader); //打开Session session=sqlSessionFactory.openSession(); //获取用户接口对象 UserMapper userMapper=session.getMapper(UserMapper.class); //调用查询方法 User user=userMapper.selectUserById(1); System.out.println(user.getName()+"..."+user.getAge()+"..."+user.getBirthday().toLocaleString()+"..."+user.getAddress()); } catch (IOException e) { e.printStackTrace(); } } }
复制代码

 

3.六、使用别名

 

<!--使用别名 --> <typeAliases> <!--用户类别名 --> <typeAlias type="com.pb.mybatis.po.User" alias="User"/> </typeAliases>

更改mapper.xml中的User类的路径 为别名

复制代码
<?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命名空间要写接口的全路径 --> <mapper namespace="com.pb.mybatis.dao.UserMapper"> <!--ID要与接口中的方法名相同 parameterType传入的参数类型 resultType 返回的类型这里也User类的全路径--> <select id="selectUserById" parameterType="int" resultType="User"> select * from user where id=#{id} </select> </mapper>
复制代码

测试类不变

3.七、使用resultMap

在mapper.xml中使用resultMap

 

复制代码
<?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命名空间要写接口的全路径 --> <mapper namespace="com.pb.mybatis.dao.UserMapper"> <!--结果映射 不区另大小写,建议数据库的列写为大写 --> <resultMap type="User" id="userMap"> <!--主键 --> <id property="id" column="ID"/> <!--姓名 --> <id property="name" column="NAME"/> <!--年龄 --> <id property="age" column="AGE"/> <!--生日 --> <id property="birthday" column="BIRTHDAY"/> <!--地址 --> <id property="address" column="ADDRESS"/> </resultMap> <!--ID要与接口中的方法名相同 parameterType传入的参数类型 resultType 返回的类型这里也User类的全路径或者类的别名, resultMap写已经有的映射2都只能同时有一个--> <select id="selectUserById" parameterType="int" resultMap="userMap"> select * from user where id=#{id} </select> </mapper>
复制代码

 

测试类不变

 

 

 

4、实现基本的增、删、改、查

4.一、在接口中增长,模糊查询,添加,修改,删除的方法,

 

复制代码
/** * @Title: UserMapper.java * @Package com.pb.mybatis.dao * @Description: TODO(用一句话描述该文件作什么) * @author 刘楠 * @date 2015-10-26 下午5:45:13 * @version V1.0 */ package com.pb.mybatis.dao; import java.util.Date; import java.util.List; import com.pb.mybatis.po.User; /** * @ClassName: UserMapper * @Description: TODO(用户类数据访问接口) * @author 刘楠 * @date 2015-10-26 下午5:45:13 * */ public interface UserMapper { /** * * @Title: selectUserById * @Description: TODO(根据用户ID查询) * @param id * @return User */ public User selectUserById(int id); /** * * @Title: selectUserLikeName * @Description: TODO(根据姓名模糊查询) * @param name * @return List<User> */ public List<User> selectUserLikeName(String name); /** * * @Title: addUser * @Description: TODO(添加用户) * @param user void */ public void addUser(User user); /** * * @Title: updateUser * @Description: TODO(修改用户) * @param user void */ public void updateUser(User user); /** * * @Title: deleteUser * @Description: TODO(删除用户) * @param id void */ public void deleteUser(int id); }
复制代码

 

4.二、在mapper.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命名空间要写接口的全路径 --> <mapper namespace="com.pb.mybatis.dao.UserMapper"> <!--结果映射 不区另大小写,建议数据库的列写为大写 --> <resultMap type="User" id="userMap"> <!--主键 --> <id property="id" column="ID"/> <!--姓名 --> <id property="name" column="NAME"/> <!--年龄 --> <id property="age" column="AGE"/> <!--生日 --> <id property="birthday" column="BIRTHDAY"/> <!--地址 --> <id property="address" column="ADDRESS"/> </resultMap> <!--ID要与接口中的方法名相同 parameterType传入的参数类型 resultType 返回的类型这里也User类的全路径或者类的别名, resultMap写已经有的映射2都只能同时有一个--> <select id="selectUserById" parameterType="int" resultMap="userMap"> select * from user where id=#{id} </select> <!--根据姓名模糊查询 --> <select id="selectUserLikeName" parameterType="String" resultMap="userMap"> select * from user where name like "%"#{name}"%" </select> <!--添加用户 useGeneratedKeys使用数据的增序列 keyProperty将增长后的用户ID返回--> <insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id"> insert into user(name,age,birthday,address) values(#{name},#{age},#{birthday},#{address}) </insert> <!--修改更新 --> <update id="updateUser" parameterType="User"> update user set name=#{name},age=#{age},birthday=#{birthday},address=#{address} where id=#{id} </update> <!--删除 --> <delete id="deleteUser" parameterType="int"> delete from user where id=#{id} </delete> </mapper>
复制代码

 

4.三、测试类

 

复制代码
/** * @Title: Test1.java * @Package com.pb.mybatis.test * @Description: TODO(用一句话描述该文件作什么) * @author 刘楠 * @date 2015-10-26 下午5:55:54 * @version V1.0 */ package com.pb.mybatis.test; import java.io.IOException; import java.io.Reader; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; 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 com.pb.mybatis.dao.UserMapper; import com.pb.mybatis.po.User; /** * @ClassName: Test1 * * @Description: TODO(测试类) * * @author 刘楠 * * @date 2015-10-26 下午5:55:54 * * */ public class Test1 { // Session工厂 static SqlSessionFactory sqlSessionFactory = null; // Session static SqlSession session = null; // 字符流 static Reader reader = null; public static void main(String[] args) { } /** * * @Title: selectById * * @Description: TODO(根据ID查找用户) void */ public static void selectById() { // 加载配置文件 try { reader = Resources.getResourceAsReader("configuration.xml"); // 创建SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); // 打开Session session = sqlSessionFactory.openSession(); // 获取用户接口对象 UserMapper userMapper = session.getMapper(UserMapper.class); // 调用查询方法 User user = userMapper.selectUserById(1); System.out.println(user.getName() + "..." + user.getAge() + "..."
                    + user.getBirthday().toLocaleString() + "..."
                    + user.getAddress()); } catch (IOException e) { e.printStackTrace(); } } /** * * @Title: selectLikeName * * @Description: TODO(根据用户名模糊查询) void */ public static void selectLikeName() { // 加载配置文件 try { reader = Resources.getResourceAsReader("configuration.xml"); // 创建SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); // 打开Session session = sqlSessionFactory.openSession(); // 获取用户接口对象 UserMapper userMapper = session.getMapper(UserMapper.class); // 调用查询方法 List<User> users = userMapper.selectUserLikeName("张"); for (User user : users) { System.out.println(user.getName() + "..." + user.getAge() + "..." + user.getBirthday().toLocaleString() + "..."
                        + user.getAddress()); } } catch (IOException e) { e.printStackTrace(); } } /** * * @Title: addUser * @Description: TODO(添加用户) void */ public static void addUser() { // 加载配置文件 try { reader = Resources.getResourceAsReader("configuration.xml"); // 创建SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); // 打开Session session = sqlSessionFactory.openSession(); // 获取用户接口对象 UserMapper userMapper = session.getMapper(UserMapper.class); // 声明新用户 User user =new User(); user.setName("呵呵"); user.setAge(22); String d="1984-09-23 20:23:22"; SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-DD HH:mm:ss"); Date date=sdf.parse(d); user.setBirthday(date); user.setAddress("不知道是哪的"); userMapper.addUser(user); System.out.println("插入后的ID"+user.getId()); //提交事务  session.commit(); } catch (IOException e) { e.printStackTrace(); } catch (ParseException e) { // TODO Auto-generated catch block  e.printStackTrace(); } } /** * * @Title: updateUser * @Description: TODO(修改用户) void */ public static void updateUser() { // 加载配置文件 try { reader = Resources.getResourceAsReader("configuration.xml"); // 创建SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); // 打开Session session = sqlSessionFactory.openSession(); // 获取用户接口对象 UserMapper userMapper = session.getMapper(UserMapper.class); // 调用查询方法 User user = userMapper.selectUserById(6); user.setName("想起 来叫什么了"); user.setAddress("魔都上海"); //更新  userMapper.updateUser(user); //提交事务  session.commit(); } catch (IOException e) { e.printStackTrace(); } } public static void detleUser() { // 加载配置文件 try { reader = Resources.getResourceAsReader("configuration.xml"); // 创建SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); // 打开Session session = sqlSessionFactory.openSession(); // 获取用户接口对象 UserMapper userMapper = session.getMapper(UserMapper.class); //删除 userMapper.deleteUser(6); //提交事务  session.commit(); } catch (IOException e) { e.printStackTrace(); } } }
复制代码

相关文章
相关标签/搜索