←←←←←←←←←←←← 我都秃顶了,还不点关注!
简介
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架,其几乎消除了所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java s,普通的 Java对象)映射成数据库中的记录。MyBatis 应用程序大都使用 SqlSessionFactory 实例,SqlSessionFactory 实例可以通过 SqlSessionFactoryBuilder 获得,而 SqlSessionFactoryBuilder 则可以从一个 配置文件或者一个预定义的配置类的实例获得。
依赖
mybatis-3.2.2.jar 核心jar
mysql-connector-java-5.1.10-bin.jar 数据库访问
1.Configuration配置
在resources下,新建Configuration.
<? 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>
<!-- 设置别名,用于在User. 中 ,这里不设置
<typeAliases>
<typeAlias alias=\"User\" type=\"com.zyzpp.model.User\"/>
</typeAliases>
-->
<typeAliases>
<typeAlias alias=\"User\" type=\"com.zyzpp.model.User\"/>
</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://118.89.177.110:3306/work?useUnicode=true&characterEncoding=UTF-8\" />
<property name=\"username\" value=\"root\" />
<property name=\"password\" value=\"336699yst\" />
</dataSource>
</environment>
</environments>
<!--映射实体的mapper配置-->
<mappers>
<mapper resource=\"com/zyzpp/inter/User. \"/>
</mappers>
</configuration>
2.Entity实体类
示例:
package com.zyzpp.model;
public class User {
private int id;
private String userName;
private int userAge;
private String userAddress;
private List<Card> cards;
....
}
3.Dao层接口
示例:
package com.zyzpp.inter;
public interface IUserOperation {
public User selectUserByID(int id);
public List<User> selectUsers(String userName);
public void addUser(User user);
public void updateUser(User user);
public void deleteUser(int id);
public List<Article> getUserArticles(@Param(\"userid\") int userid); //多个参数要加注释区分
public User getUserCards(int id);
public int getCount(User user);
public List<User> getLimit(Map map);
}
4.Mapper配置
说白了,就是实现上步接口方法
<? 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.zyzpp.inter.IUserOperation\">
<!-- 如果在配置 文件中设置了别名,在这里可以只写别名
<select id=\"seleteUserByID\" parameterType=\"int\"
select中包含的是SQL语句,以及语句的参数。
id 与 接口的方法名一致 parameterType是方法参数类型 -->
<!-- 根据id查询用户 -->
<select id=\"selectUserByID\" parameterType=\"int\" resultType=\"cn.zyzpp.model.User\">
select * from user where id=#{id}
</select>
<resultMap type=\"User\" id=\"resultListUser\">
<id column=\"id\" property=\"id\" jdbcType=\"INTEGER\" />
<result column=\"userName\" property=\"userName\" jdbcType=\"VARCHAR\" />
<result column=\"userAge\" property=\"userAge\" jdbcType=\"INTEGER\" />
<result column=\"userAddress\" property=\"userAddress\" jdbcType=\"VARCHAR\" />
</resultMap>
<!-- 根据用户名模糊查找 -->
<select id=\"selectUsers\" parameterType=\"String\" resultMap=\"resultListUser\">
select * from user where userName like #{userName}
</select>
<!-- 增加一个用户 -->
<insert id=\"addUser\" parameterType=\"User\" useGeneratedKeys=\"true\"
keyProperty=\"id\">
insert into user(userName,userAge,userAddress)
values(#{userName},#{userAge},#{userAddress})
</insert>
<!-- 根据ID更新用户信息 -->
<update id=\"updateUser\" parameterType=\"User\">
update user set userName =
#{userName},userAge=#{userAge},userAddress=#{userAddress} where
id=#{id}
</update>
<!-- 根据id删除用户 -->
<delete id=\"deleteUser\" parameterType=\"int\">
delete from user where id=#{id}
</delete>
<!-- 其中需要说明的是,如果两个表中存在重名字段,如上文所述uesr表中有id字段,article表中同样有id字段,
在使用Mybatis进行联合查询的过程中,会遇到只返回一条数据的情况。然而在数据库中直接运行sql语句是正常的。
在出现重名字段时,配置Mybatis文件时需要把字段重新命名,否则Mybatis会混乱.
例如下面的 ID一号二号不可以重复。在这里就把article表中的id字段命名为了aid。只可改一号!
-->
<!-- User 联合文章进行查询 方法之一的配置 (多对一的方式) column=\"数据库字段名\" property=\"实体类属性\" jdbcType=\"数据库字段类型\" -->
<resultMap id=\"resultUserArticleList\" type=\"com.zyzpp.model.Article\">
<id property=\"id\" column=\"aid\" jdbcType=\"INTEGER\" /><!-- id一号 -->
<result property=\" \" column=\" \" />
<result property=\"content\" column=\"content\" />
<!-- associayion=标签
也可以<association property=\"user\" javaType=\"User\" resultMap=\"resultListUser\"/>
-->
<association property=\"user\" javaType=\"User\" column=\"userid\">
<id property=\"id\" column=\"id\" /><!-- id 二号-->
<result property=\"userName\" column=\"userName\" />
<result property=\"userAddress\" column=\"userAddress\" />
</association>
</resultMap>
<!-- 多对一 -->
<select id=\"getUserArticles\" parameterType=\"int\"
resultMap=\"resultUserArticleList\">
select user.id,user.userName,user.userAddress,article.id aid,article. ,article.content from user,article
where
user.id=article.userid and user.id=#{id}
</select>
<!-- 一对多 collection 查询用户手机卡-->
<resultMap id=\"resultUserCards\" type=\"com.zyzpp.model.User\">
<id property=\"id\" column=\"u_id\" />
<result property=\"userName\" column=\"userName\" />
<result property=\"userAge\" column=\"userAge\" />
<result property=\"userAddress\" column=\"userAddress\" />
<collection property=\"cards\" ofType=\"com.zyzpp.model.Card\">
<id property=\"id\" column=\"id\" />
<result property=\"cardNo\" column=\"card_no\" />
<result property=\"remark\" column=\"remark\" />
</collection>
</resultMap>
<!-- 一对多 -->
<select id=\"getUserCards\" parameterType=\"int\" resultMap=\"resultUserCards\">
SELECT u.id u_id,u.userName,u.userAge,u.userAddress,c.id,c.card_no,c.remark
FROM user u,card c
WHERE u.id=c.user_id AND u.id=#{id}
</select>
<!-- 获取总条数 -->
<select id=\"getCount\" parameterType=\"com.zyzpp.model.User\" resultType=\"int\">
select count(*) from user
<where>
<if test=\"id!=0\"><!-- " \" -->
and id=#{id}
</if>
<if test=\"userName!=null and !"".equals(userName.trim())\">
and userName like % #{userName} %
</if>
</where>
</select>
<!-- 获取特定记录-->
<select id=\"getLimit\" parameterType=\"java.util.Map\" resultMap=\"resultListUser\">
SELECT * FROM user
<where>
<if test=\"user.id!=0\"><!-- " \" -->
and id=#{user.id}
</if>
<if test=\"user.userName!=null and !"".equals(user.userName.trim())\">
and userName like % #{user.userName} %
</if>
</where>
order by id LIMIT #{page.dbIndex},#{page.dbNumber};
</select>
</mapper>
5.开始使用
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 Test {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
private static String resource = \"Configuration. \"; //mybatis的配置文件
static{
try{
/*使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)*/
reader=Resources.getResourceAsReader(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);//构建sqlSession的工厂
}catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Test test =new Test();
User user=new User();
test.getLimit();
// test.getCount(user);
// test.getUserCards(1);
// test.getUserArticles(1);
// test.getUserList(\"%\");
// test.addUser();
// test.updateUser(1, \"这是更新后的地址\");
// test.deleteUser(3);
}
/*
* 以ID查找单个数据
*/
public void getUserByID(int id){
SqlSession session=sqlSessionFactory.openSession();
try{
IUserOperation userOperation=session.getMapper(IUserOperation.class);
User user=userOperation.selectUserByID(id);
System.out.println(\"查询ID:\"+id+\"结果如下\\n\"+\"名字:\"+user.getUserName()+\" 年龄:\"+user.getUserAge()+\" 地址:\"+user.getUserAddress());
}finally {
session.close();
}
}
/*
* 以name查找符合的List列表
*/
public void getUserList(String userName){
SqlSession session=sqlSessionFactory.openSession();
try{
IUserOperation userOperation=session.getMapper(IUserOperation.class);
List<User> users = userOperation.selectUsers(userName);
System.out.println(\"查询结果如下:\");
for(User user: users){
System.out.println(user.toString());
}
}finally {
session.close();
}
}
/*
* 增加一个用户
*/
public void addUser(){
User user = new User();
user.setUserAddress(\"人民广场\");
user.setUserAge(18);
user.setUserName(\"飞鸟\");
SqlSession session = sqlSessionFactory.openSession();
try{
IUserOperation userOperation =session .getMapper(IUserOperation.class);
userOperation.addUser(user);
session.commit();
System.out.println(\"当前增加的用户ID:\"+user.getId());
}finally {
session.close();
}
}
/*
* 更新数据
*/
public void updateUser(int id,String content){
//先得到用户,然后修改提交
SqlSession session = sqlSessionFactory.openSession();
try{
IUserOperation userOperation = session.getMapper(IUserOperation.class);
User user = userOperation.selectUserByID(id);
user.setUserAddress(content);
userOperation.updateUser(user);
session.commit();
System.out.println(\"更新ID:\"+id+\"成功!\");
}finally {
session.close();
}
}
/*
* 删除数据
*/
public void deleteUser(int id){
SqlSession session = sqlSessionFactory.openSession();
try{
IUserOperation userOperation = session.getMapper(IUserOperation.class);
userOperation.deleteUser(id);
session.commit();
System.out.println(\"删除ID:\"+id+\"成功!\");
}finally {
session.close();
}
}
/*
* 多对一
*/
public void getUserArticles(int userid){
SqlSession session = sqlSessionFactory.openSession();
try {
IUserOperation userOperation=session.getMapper(IUserOperation.class);
List<Article> articles = userOperation.getUserArticles(userid);
for(Article article:articles){
System.out.println(\"标题:\"+article.get ()+\":内容:\"+article.getContent()+
\":作者是:\"+article.getUser().getUserName()+\":地址:\"+
article.getUser().getUserAddress());
}
} finally {
session.close();
}
}
/*
* 一对多
*/
private void getUserCards(int userid) {
SqlSession session = sqlSessionFactory.openSession();
try {
IUserOperation userOperation = session.getMapper(IUserOperation.class);
User user = userOperation.getUserCards(userid);
System.out.println(user.toString());
for (Card card : user.getCards()) {
System.out.println(card.toString());
}
} finally {
session.close();
}
}
/*
* 按条件查询总条数
*/
private int getCount(User user){
SqlSession session = sqlSessionFactory.openSession();
try {
IUserOperation userOperation = session.getMapper(IUserOperation.class);
int i = userOperation.getCount(user);
System.out.println(\"总条数:\"+i);
return i;
} finally {
session.close();
}
}
/**
* 按条件查询List记录
*/
private void getLimit(){
SqlSession session = sqlSessionFactory.openSession();
try {
IUserOperation userOperation = session.getMapper(IUserOperation.class);
Map<String, > map=new HashMap<String, >();
Page page=new Page();
page.setDbIndex(0);
page.setDbNumber(1);
User user=new User();
user.setId(1);
map.put(\"page\", page);
map.put(\"user\", user);
List<User> users = userOperation.getLimit(map);
System.out.println(\"查询结果如下:\");
for(User use: users){
System.out.println(use.toString());
}
} finally {
session.close();
}
}
}
写在最后:
秃顶程序员的不易,看到这里,点了关注吧!
点关注,不迷路,持续更新!!!
继续阅读与本文标签相同的文章
-
最佳 Linux 发行版汇总
2026-05-18栏目: 教程
-
StartDT AI Lab | 视觉智能引擎——AI识货赋能商品数字化
2026-05-18栏目: 教程
-
【DockerCon2017技术解读】如何在阿里云一键部署高可用的Kubernetes集群
2026-05-18栏目: 教程
-
基于Jenkins的开发测试全流程持续集成实践
2026-05-18栏目: 教程
-
什么是网络爬虫?有什么用?怎么爬?终于有人讲明白了
2026-05-18栏目: 教程
