mybatis系列一:mybatis实现增删改查

xiaoxiao2021-02-27  274

1.效果图:

2.Mybatis的步骤:

本内容涉及到mysql数据库,先去下载一个数据库,新建一个User表和Article表

Create TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(50) DEFAULT NULL, `userAge` int(11) DEFAULT NULL, `userAddress` varchar(200) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; Insert INTO `user` VALUES ('1', 'summer', '100', 'shanghai,pudong'); Drop TABLE IF EXISTS `article`; Create TABLE `article` ( `id` int(11) NOT NULL auto_increment, `userid` int(11) NOT NULL, `title` varchar(100) NOT NULL, `content` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -- 添加几条测试数据 -- ---------------------------- Insert INTO `article` VALUES ('1', '1', '11111', 'dsgfd'); Insert INTO `article` VALUES ('2', '1', '22222', 'dfsdgds'); Insert INTO `article` VALUES ('3', '1', 'dddd3','dfsfsdfd'); Insert INTO `article` VALUES ('4', '1', 'ddd4', '5555');

2.1先将mybatis-3.2.7.jar和mysql-connector-java-5.1.22-bin.jar两个需要用到的jar包拷到WEB-INF下面的lib文件夹

2.2 看上图中的架构,新建包和类,按顺序新建

Article类:

package com.mybatis.model; public class Article { private int id; private User user; private String title; private String content; public int getId() { return id; } public void setId(int id) { this.id = id; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } } User类:

package com.mybatis.model; public class User { private int id; private String userName; private String userAge; private String userAddress; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserAge() { return userAge; } public void setUserAge(String userAge) { this.userAge = userAge; } public String getUserAddress() { return userAddress; } public void setUserAddress(String userAddress) { this.userAddress = userAddress; } } IUserOperation接口:

package com.mybatis.interfaces; import com.mybatis.model.*; import java.util.List; public interface IUserOperation { //定义的接口名需与User.xml里的id值要对应 public List<User> getUserList(String userName); public List<Article> getUserAticles(int id); public User selectUserByID(int id); public int insertUserInfo(User user); public int updateUserInfo(User user); public int deleteUserInfo(int id); }

新建User.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.mybatis.interfaces.IUserOperation"> <!-- 通过用户id返回用户信息 --> <select id="selectUserByID" parameterType="int" resultType="User"> select * from `user` where id = #{id} </select> <!-- 返回List而定义的resultMap,注意column是数据库中定义的列字段,而property是我们自定义的字段,能够解决属性和数据库字段不一致的问题 --> <resultMap type="User" id="resultUserList"> <id column="id" property="id"></id> <result column="userName" property="userName"/> <result column="userAge" property="userAge"/> <result column="userAddress" property="userAddress"/> </resultMap> <!-- 通过用户名返回用户列表 --> <!-- 记住:在获取List列表的时候,resultMap="resultUserList"千万别写成resultType="resultUserList",否则报错 --> <select id="getUserList" parameterType="string" resultMap="resultUserList"> select * from `user` where userName like #{userName} </select> <!-- 记住type="Article"新加一个class,要去configuration.xml进行别名定义,否则找不到报错 --> <!-- 通过association来关联user,达到多对一的效果,多篇文章对应一个用户 --> <!-- column="aid"给数据库列id命了一个别名,区分关联的id,否则只能查询出一条数据 --> <resultMap type="Article" id="resultUserArticleList"> <id column="aid" property="id"></id> <result column="title" property="title"/> <result column="content" property="content"/> <!-- <association property="user" javaType="User"> <id column="id" property="id"></id> <result column="userName" property="userName"/> <result column="userAddress" property="userAddress"/> </association> --> <!-- 上面的association等同于下面的这个,前提条件是之前就已经定义过resultUserList --> <association property="user" javaType="User" resultMap="resultUserList"></association> </resultMap> <!-- 获取用户的多个文章 --> <select id="getUserAticles" parameterType="int" resultMap="resultUserArticleList"> select user.id,user.userName,user.userAddress, article.id aid,article.title,article.content from user,article where user.id=article.userid and user.id=#{id} </select> <!-- useGeneratedKeys设置为"true"表明要MyBatis获取由数据库自动生成的主键;keyProperty="id"指定把获取到的主键值注入到User的id属性 --> <insert id="insertUserInfo" parameterType="User" useGeneratedKeys="true" keyProperty="id"> insert into `user`(userName,userAge,userAddress) values (#{userName},#{userAge},#{userAddress}) </insert> <update id="updateUserInfo" parameterType="User"> update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id=#{id} </update> <delete id="deleteUserInfo" parameterType="int"> delete from `user` where id=#{id} </delete> </mapper> <!-- namespace命名空间中的值一定要对应包定义的接口"com.mybatis.interfaces.IUserOperation",否则报错 -->

新建配置文件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> <!-- mybatis别名定义 --> <typeAliases> <typeAlias alias="User" type="com.mybatis.model.User" /> <typeAlias alias="Article" type="com.mybatis.model.Article" /> </typeAliases> <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://127.0.0.1:3306/mybatis" /> <property name="username" value="root" /> <property name="password" value="password" /> </dataSource> </environment> </environments> <mappers> <mapper resource="com/mybatis/model/User.xml" /> </mappers> </configuration> <!-- Ctrl+Shift+F 自动排版 -->

最后开始测试,新建一个测试类:

package com.mybatis.test; import com.mybatis.interfaces.IUserOperation; import com.mybatis.model.User; import com.mybatis.model.Article; 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 java.util.List; public class Test { private static SqlSessionFactory sqlFactory; private static Reader reader; private static User user; private static int Ret; /*static{}(即static块),会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方*/ static { try { reader = Resources.getResourceAsReader("Configuration.xml"); sqlFactory = new SqlSessionFactoryBuilder().build(reader); } catch (Exception e) { e.printStackTrace(); } } public static SqlSessionFactory getSession() { return sqlFactory; } //获取用户列表 public static void GetUserList(List<User> UserList) { if(UserList.size()>0){ for(User u:UserList){ System.out.println("Id:"+u.getId()+";UserName:"+u.getUserName()+";UserAge:"+u.getUserAge()+ ";UserAddress:"+u.getUserAddress()); } } else{ System.out.println("用户不存在!"); } } //获取用户文章列表 public static void GetUserArticle(List<Article> articleList) { if(articleList.size()>0){ for(Article a:articleList){ System.out.println("UserName:"+a.getUser().getUserName()+";UserAddress:"+a.getUser().getUserAddress()+ ";ArticleTitle:"+a.getTitle()+";ArticleContent:"+a.getContent()); } } else{ System.out.println("用户不存在!"); } } public static void main(String[] args) { SqlSession session = sqlFactory.openSession(); try { IUserOperation operation=session.getMapper(IUserOperation.class); //新增 /*user=new User(); user.setUserName("Amyli"); user.setUserAge("20"); user.setUserAddress("Ludun BaLin"); Ret=operation.insertUserInfo(user); if(Ret>0){ System.out.println("新增成功!"); } else{ System.out.println("新增失败!"); }*/ //删除 /*Ret=operation.deleteUserInfo(27); if(Ret>0){ System.out.println("删除成功!"); } else{ System.out.println("删除失败!"); }*/ //修改 user = operation.selectUserByID(24); user.setUserAge("23"); user.setUserAddress("Chendu SiChuan"); Ret=operation.updateUserInfo(user); if(Ret>0){ System.out.println("修改成功!"); } else{ System.out.println("修改失败!"); } session.commit(); //记住,做增删改操作,一定要记得调用commit提交,否则无效。 //查询 user = operation.selectUserByID(24); System.out.println(user.getId()); System.out.println(user.getUserName()); System.out.println(user.getUserAge()); System.out.println(user.getUserAddress()); System.out.println(""); Test.GetUserList(operation.getUserList("DaLei")); System.out.println("文章:"); Test.GetUserArticle(operation.getUserAticles(24)); } finally { session.close(); } } }

里面有好几个细节要注意,具体看代码,里面有详细注释!

Mybatis代码下载 :Mybatis代码

转载请注明原文地址: https://www.6miu.com/read-4612.html

最新回复(0)