mybatis简单项目
1,mybatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
2,mybatis的简单实例
mysql 建表
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(45) DEFAULT NULL,
`sex` varchar(45) DEFAULT NULL,
`birthday` date DEFAULT NULL,
`address` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
SELECT * FROM testdb.user;
maven 依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
User 表对应的类:
import java.util.Date;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class User {
private int id;
private String username;
private String sex;
private Date birthday;
private String address_city;
}
mybatis的配置文件mybatis-xml,目标位置src/main/resources 下
<?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>
<!--别名 在XXXmapper.xml 的resultType 或者 parameterType 就可以写User了 -->
<typeAliases>
<typeAlias type="com.ys.entity.User" alias="User" />
</typeAliases> <!-- 数据库环境配置 -->
<environments default="development">
<environment id="development">
<!-- jdbc管理 -->
<transactionManager type="JDBC" />
<!-- 用什么连接池 -->
<dataSource type="POOLED">
<!-- jdbc驱动 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<!-- 数据库名字url -->
<property name="url" value="jdbc:mysql://127.0.0.1:3306/testdb" />
<!-- 数据库用户 -->
<property name="username" value="root" />
<!-- 数据库用户密码 -->
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!-- 把User.xml注册到mybatis的配置文件中,User.xml下面配置 -->
<mappers>
<mapper resource="com/ys/mappersxml/UserMapper.xml"></mapper>
</mappers>
</configuration>
mybatis.xml 的标签的作用:
<!--别名 在XXXmapper.xml 的resultType 或者 parameterType 就可以写User了 -->
<typeAliases>
<typeAlias type="com.ys.entity.User" alias="User" />
</typeAliases>
将每个mapper.xml 注册到mybatis 中
<mappers>
<mapper resource="com/ys/mappersxml/UserMapper.xml"></mapper>
</mappers>
接下来就是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="com.ys.mappers.UserMapper"> <!-- 根据 id 查询 user 表中的数据 id:唯一标识符,此文件中的id值不能重复 resultType:返回值类型,一条数据库记录也就对应实体类的一个对象
parameterType:参数类型,也就是查询条件的类型 -->
<select id="selectUserById" resultType="User" parameterType="int">
<!-- 这里和普通的sql 查询语句差不多,对于只有一个参数,后面的 #{id}表示占位符,里面不一定要写id,写啥都可以,但是不要空着,如果有多个参数则必须写pojo类里面的属性 -->
select * from user where id = #{id}
</select> <insert id="insertUser" parameterType="com.ys.entity.User">
insert into
user(id,username,sex,birthday,address)
value(#{id},#{username},#{sex},#{birthday},#{address})
</insert> <select id="selectAllUser" resultType="com.ys.entity.User">
select * from user
</select> <select id="selectUserNameLike" parameterType="java.lang.String"
resultType="com.ys.entity.User">
select * from user where username like '%${value}%'
</select> <select id="selectByName" parameterType="java.lang.String"
resultType="com.ys.entity.User">
select * from user where username = #{username}
</select> <delete id="deleteUserById" parameterType="int">
delete from user where
id=#{id}
</delete> <update id="updateUserById" parameterType="java.util.Map">
update user set
username=#{username} where id=#{id}
</update> <!-- resultMap --> <resultMap id="userResultMap" type="User">
<id property="id" column="id" />
<result property="username" column="username" />
<result property="address_city" column="address" />
</resultMap> <select id="selectUserByIdMap" resultMap="userResultMap" parameterType="int">
<!-- 数据库address 对应address_city -->
select id,username,address from user where id =#{id}
</select> </mapper>
UserMapper 接口,定义了需要的查询方法:UserMapper.xml 里面的方法名称要和 UserMapper.java 里面一样:
package com.ys.mappers; import java.util.List;
import java.util.Map; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; import com.ys.entity.User; public interface UserMapper { void insertUser(User user); User selectUserById(int id); List<User> selectAllUser(); //模糊查询的
List<User> selectUserNameLike(String username); List<User> selectByName(String username); void deleteUserById(int id); // 多参数 传递方式1
// public void updateUserById(@Param("id")int id,@Param("username")String
// username); // 多参数 传递方式2
void updateUserById(Map<String, Object> map); // 使用注解 字符串替换 不用写根据id查 根据username查 根据address 查
@Select("select * from user where ${column} = #{value}")
List<User> findByColumn(@Param("column") String column, @Param("value") String value); // resultMap 结果映射 只想输出部分的属性
User selectUserByIdMap(int id); }
测试:
ublic class App {
public static void main(String[] args) {
String resource = "mybatis.xml";
// 加载 mybatis 全局配置文件
InputStream inputStream = CRUDTest.class.getClassLoader().getResourceAsStream(resource);
// 构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 根据 sqlSessionFactory 产生 session
SqlSession session = sessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUserById(1);
System.out.println(user.getUsername());
// 插入
// User u = new User();
// u.setUsername("Jimmy");
// u.setSex("female");
// u.setAddress_city("Pekin");
// mapper.insertUser(u);
// 查询所有
List<User> users = mapper.selectAllUser();
for (User user2 : users) {
System.out.println("selectAll: " + user2.getUsername());
}
// 模糊查询
List<User> userLikes = mapper.selectUserNameLike("L");
for (User user2 : userLikes) {
System.out.println("selectUserNameLike: " + user2.getUsername());
}
// 根据姓名查询
List<User> selectByName = mapper.selectByName("Jim");
for (User user2 : selectByName) {
System.out.println("selectByName: " + user2.getUsername());
}
//根据id 删除
//mapper.deleteUserById(3);
//更新 多个不同类型的传参 map
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("id", 1);
map.put("username", "Linda");
mapper.updateUserById(map);
//字符串替换
List<User> findByColumn = mapper.findByColumn("username","Linda");
for (User user2 : findByColumn) {
System.out.println("findByColumn: " + user2.getUsername());
//数据库的字段是address javaBean是属性是address 所以直接查询不能映射,需要resultMap
System.out.println("findByColumn: "+user2.getAddress_city());
}
//resultMap 结果映射
User selectUserByIdMap = mapper.selectUserByIdMap(1);
System.out.println("resultMapSelect "+selectUserByIdMap.getAddress_city());
session.close();
}
}
mybatis简单项目的更多相关文章
- mybatis 简单项目步骤
mybatis.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configura ...
- springboot + mybatis 的项目,实现简单的CRUD
以前都是用Springboot+jdbcTemplate实现CRUD 但是趋势是用mybatis,今天稍微修改,创建springboot + mybatis 的项目,实现简单的CRUD 上图是项目的 ...
- IntelliJ IDEA 创建 Maven简单项目
创建简单Maven项目 使用IDEA提供的Maven工具,根据artifact创建简单Maven项目.根据下图操作,创建Maven项目. 使用IDEA提供的Maven工具创建的Maven简单项目目录结 ...
- spring springmvc mybatis maven 项目整合示例-导航页面
spring原理 实践解析-简单的helloworld spring原理案例-基本项目搭建 01 spring framework 下载 官网下载spring jar包 spring原理案例-基本项目 ...
- spring Boot + MyBatis + Maven 项目,日志开启打印 sql
在 spring Boot + MyBatis + Maven 项目中,日志开启打印 sql 的最简单方法,就是在文件 application.properties 中新增: logging.leve ...
- Spring Boot Mybatis简单使用
Spring Boot Mybatis简单使用 步骤说明 build.gradle:依赖添加 application.properties:配置添加 代码编写 测试 build.gradle:依赖添加 ...
- 最详细的SSM(Spring+Spring MVC+MyBatis)项目搭建
速览 使用Spring+Spring MVC+MyBatis搭建项目 开发工具IDEA(Ecplise步骤类似,代码完全一样) 项目类型Maven工程 数据库MySQL8.0 数据库连接池:Druid ...
- 浅析MyBatis(二):手写一个自己的MyBatis简单框架
在上一篇文章中,我们由一个快速案例剖析了 MyBatis 的整体架构与整体运行流程,在本篇文章中笔者会根据 MyBatis 的运行流程手写一个自定义 MyBatis 简单框架,在实践中加深对 MyBa ...
- eclipse建立springMVC 简单项目
http://jinnianshilongnian.iteye.com/blog/1594806 如何通过eclipse建立springMVC的简单项目,现在简单介绍一下. 工具/原料 eclip ...
随机推荐
- Day 1 模拟
1. P1088 火星人 利用STL中的next_permutation();函数求一种排列的下一种排列,循环m次即为答案.(STL大法好~~C++是世界上最好的语言~~逃 #include < ...
- 浅谈.NET Framework 与CLR
承载公共语言运行时 (CLR) 的所有应用程序均需启动(或称“激活”)CLR 以运行托管代码. 通常,.NET Framework 应用程序在生成它的 CLR ...
- HttpClientFactory的套路,你知多少?
背景 ASP.NET Core 在 2.1 之后推出了具有弹性 HTTP 请求能力的 HttpClient 工厂类 HttpClientFactory. 替换的初衷还是简单摆一下: ① using(v ...
- 移动端轮播图实现方法(dGun.js)
本文章介绍在移动端无缝隙轮播图实现的原理,这个轮子比较简单,但可以方便刚刚入门的同学参考.最终效果是在移动端无缝隙无限滑动,可以自定义轮播的速度.支持手势左右滑动.最后会放上源码. HTML部分 &l ...
- elasticsearch-head 安装
一.安装phantomjs(由于入坑多写一步,此步骤可省掉) 1.下载phantomjs 安装npm的时候会依赖phantomjs 所以我们先安装phantomjs phantomjs 下载地址:ht ...
- yolo3各部分代码详解(超详细)
0.摘要 最近一段时间在学习yolo3,看了很多博客,理解了一些理论知识,但是学起来还是有些吃力,之后看了源码,才有了更进一步的理解.在这里,我不在赘述网络方面的代码,网络方面的代码比较容易理解,下面 ...
- 编译putty 源码去掉 Are you sure you want to close this session? 提示
0, 为什么要编译 putty ?在关闭窗口的时候,会弹出一个 Are you sure you want to close this session?要把这个去掉.当然也可以用 OD 之类的来修改. ...
- ggplot2(5) 工具箱
5.1 简介 ggplot2的图层化架构鼓励我们以一种结构化的方式来设计和构建图形.本章旨在概述可用的几何对象和统计变换,在文中逐个详述.每一节都解决一个特定的作图问题. 5.2 图层叠加的总体策略 ...
- Flask 偏函数、g对象、flask-session、数据库连接池、信号、自制命令、flask-admin
目录 一.偏函数 二.g对象 g对象和session的区别 三.flask-session 四.数据库连接池 pymsql链接数据库 数据库连接池版 utils/sql.py 五.信号 六.命令fla ...
- 关于ATL生成COM注册失败解决方法
最近搞C++封装研究了下COM 做最后整理打包的时候发现各种问题引发的注册失败,so整理下备忘. 1.因引用其它动态连接库与你注册的dll不在同一目录下引起的异常.(解决方法将依赖dll放置与注册dl ...