ssm整合——Mybatis配置(1)
mybatis搭建-基于注解
1. 环境准备
1.1 新建maven的webapp项目
1.2 新建必要的目录和文件
1.3 文件配置
- pom.xml
- junit默认创建是4.11,手动改成4.12
<dependency>
<!-- 单元测试,这里将原先的4.11版本改为了4.12-->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<!-- mysql驱动包用于建立数据库连接-->
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<dependency>
<!-- mybatisjar包-->
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<!-- 用于日志记录-->
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
- log4j.properties
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE # Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE # CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n # LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
# 可修改log文件的位置
log4j.appender.LOGFILE.File=G:\\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
- SqlMapConifg.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 的环境 -->
<environments default="mysql">
<!-- 配置 mysql 的环境 -->
<environment id="mysql">
<!-- 配置事务的类型 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置连接数据库的信息:用的是数据源(连接池) -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatistest?serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 告知 mybatis 映射配置的位置,,映射配置文件指的是每个dao的配置文件 -->
<mappers>
<!-- 使用xml文件配置sql语句时
<mapper resource="com/ow/dao/IUserDao.xml"/>-->
<!-- 使用注解配置sql语句时 -->
<mapper class="com.ow.dao.IUserDao"></mapper>
</mappers>
</configuration>
2. 编写程序
2.1 User.java
基于注解配置需要保持domain类的字段名称和数据库的字段名称相同
- 省略get,set方法,以及toString方法
public class User {
private Integer id;
private String name;
private Float money;
2.2 IUserDao.java
public interface IUserDao {
//插入用户,这里的id是自增键
@Update("insert into account(name,money) values (#{name},#{money})")
void saveUser(User user);
//删除一个用户
@Update("delete from account where id = #{uid}")
void deleteUser(Integer uid);
//更新用户
@Update("update account set name=#{name},money=#{money} where id=#{id}")
void updateUser(User user);
//查询所有用户
@Select("select * from account")
List<User> findAll();
//查询单个用户
@Select("select * from account where id = #{uid}")
User findOne(Integer uid);
}
2.3 测试程序
- mybatis默认不是事务自动提交,因此需设置自动提交(factory.openSession(true)),
- 或者设置手动提交:session.commit()
public class MybatisTest1 {
private InputStream in;
private SqlSession session;
private IUserDao userDao;
@Before
public void init() throws Exception{
//1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConifg.xml");
//2.创建 SqlSessionFactory 的构建者对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3.使用构建者创建工厂对象 SqlSessionFactory
SqlSessionFactory factory = builder.build(in);
//4.使用 SqlSessionFactory 生产 SqlSession 对象
session = factory.openSession();
//SqlSession session = factory.openSession(true);//设置事务自动提交,或者在完成之后手动提交
//5.使用 SqlSession 创建 dao 接口的代理对象
userDao = session.getMapper(IUserDao.class);
}
@After
public void destory()throws Exception{
session.commit();//设置事务手动提交
//释放资源
session.close();
in.close();
}
//测试查询所有用户
@Test
public void run1()throws Exception{
//6.使用代理对象执行相应的方法
List<User> users = userDao.findAll();
for (User user : users){
System.out.println(user);
}
}
//测试按照id查询用户
@Test
public void run2()throws Exception{
User user = userDao.findOne(3);
System.out.println(user);
}
//测试按照id更新用户
@Test
public void run3()throws Exception{
User user=new User();
user.setName("ttt");
user.setMoney(500f);
user.setId(7);
userDao.updateUser(user);
}
//测试根据id删除用户
@Test
public void run4()throws Exception{
userDao.deleteUser(8);
}
//测试插入用户
@Test
public void run5()throws Exception{
User user=new User();
user.setName("ppp");
user.setMoney(500f);
userDao.saveUser(user);
}
}
mybatis搭建-基于配置
1. 环境准备
1.1 新建maven的webapp项目
1.2 新建必要的目录和文件
- 这里相比较注解只是多了一个IUserDao.xml的配置文件
- 基于配置文件配置时,配置文件的位置影响到具体的设置,这里将配置文件放在resources目录下,并且保持包路径和文件名和dao文件一致
- 具体参考:blog.csdn.net/lmy86263/ar…
1.3 文件配置
pom.xml 同上
log4j.properties 同上
SqlMapConifg.xml
通过“”配置了具体dao的位置
也可以通过 ”“ 配置具体dao所在的包
还可以通过typeAliases为domain下的类配置别名
<!-- 使用typeAliases配置别名,它只能配置domain中类的别名 -->
<typeAliases>
<!-- typeAlias用于配置别名:type属性指定的是实体类全限定类名;alias属性指定别名,当指定了别名就不再区分大小写
<typeAlias type="com.itheima.domain.User" alias="user"></typeAlias>--> <!-- 用于指定要配置别名的包,当指定之后,该包下的实体类都会注册别名,并且类名就是别名,不再区分大小写-->
<package name="com.ow.domain"></package>
</typeAliases>
复制代码
<?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 的环境,这里没有配置别名 -->
<environments default="mysql">
<!-- 配置 mysql 的环境 -->
<environment id="mysql">
<!-- 配置事务的类型 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置连接数据库的信息:用的是数据源(连接池) -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatistest?serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 告知 mybatis 映射配置的位置,,映射配置文件指的是每个dao的配置文件 -->
<mappers>
<!-- 使用xml文件配置sql语句时
<mapper resource="com/ow/dao/IUserDao.xml"/>-->
<!-- 使用注解配置sql语句时 -->
<mapper class="com.ow.dao.IUserDao"></mapper>
</mappers>
</configuration>
2.1 编写程序-类和表字段一致
2.1 User.java
- 这里仍然保持domain的类和数据库表字段名称一致,若不一致,需要在IUserDao.xml中做另外的配置
- 省略get,set方法,以及toString方法
public class User {
private Integer id;
private String name;
private Float money;
复制代码
2.2 IUserDao.java
这里新增了几个方法
public interface IUserDao {
//插入用户,这里的id是自增键
void saveUser(User user);
//删除一个用户
void deleteUser(Integer uid);
//更新用户
void updateUser(User user);
//查询所有用户
List<User> findAll();
//查询单个用户
User findOne(Integer uid);
//根据名称模糊查询用户信息
List<User> findByName(String usename);
//查询总用户数
int findTotal();
}
2.3 IUserDao.xml
- 这里是类属性和表字段一致的配置
<mapper namespace="com.ow.dao.IUserDao"><!-- 配置接口 -->
<!-- 1. 插入用户 -->
<!-- last_insert_id()用于获取表中自增字段的当前值,
id为dao中的方法名,parameterType为参数的类型
order为after,可省略,
keyProperty表示返回的id值应该返回给user类中的哪一个属性,
keyColumn用于指明数据表中的自增字段,可省略
resultType表示返回结果的类型,不可省略 -->
<insert id="saveUser" parameterType="com.ow.domain.User">
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
select last_insert_id();
</selectKey>
insert into account(name,money) values (#{name},#{money});
</insert>
<!-- 2. 删除用户 -->
<!-- 这里的uid即为方法中的参数 -->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from account where id = #{uid}
</delete>
<!-- 3. 更新用户 -->
<delete id="updateUser" parameterType="com.ow.domain.User">
update account set name=#{name},money=#{money} where id=#{id}
</delete>
<!-- 4. 查询所有用户 -->
<select id="findAll" resultType="com.ow.domain.User">
select * from account
</select>
<!-- 5. 查询单个用户 -->
<select id="findOne" resultType="com.ow.domain.User" parameterType="java.lang.Integer">
select * from account where id = #{uid}
</select>
<!-- 6. 根据名称模糊查询用户信息 -->
<select id="findByName" resultType="com.ow.domain.User" parameterType="java.lang.String">
select * from account where name like #{usename}
</select>
<!-- 7. 查询总用户数,返回值的类型需和方法对应 -->
<select id="findTotal" resultType="int" >
select count(id) from account
</select>
<!-- 8. 根据对象条件查询 -->
<select id="findByQv" parameterType="com.ow.domain.QueryEp" resultType="com.ow.domain.User">
select * from account where name = #{user.name}
</select>
</mapper>
2.3 测试程序
public class MybatisTest1 {
private InputStream in;
private SqlSession session;
private IUserDao userDao;
@Before
public void init() throws Exception{
//1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConifg.xml");
//2.创建 SqlSessionFactory 的构建者对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3.使用构建者创建工厂对象 SqlSessionFactory
SqlSessionFactory factory = builder.build(in);
//4.使用 SqlSessionFactory 生产 SqlSession 对象
session = factory.openSession();
//SqlSession session = factory.openSession(true);//设置事务自动提交,或者在完成之后手动提交
//5.使用 SqlSession 创建 dao 接口的代理对象
userDao = session.getMapper(IUserDao.class);
}
@After
public void destory()throws Exception{
session.commit();//设置事务手动提交
//释放资源
session.close();
in.close();
}
// 1. 测试插入用户
@Test
public void run1()throws Exception{
User user=new User();
user.setName("ppp");
user.setMoney(500f);
System.out.println("保存之前:"+user);
userDao.saveUser(user);
System.out.println("保存之后:"+user);
}
// 2. 测试根据id删除用户
@Test
public void run2()throws Exception{
userDao.deleteUser(18);
}
// 3. 测试按照id更新用户
@Test
public void run3()throws Exception{
User user=new User();
user.setName("ttt");
user.setMoney(500f);
user.setId(20);
userDao.updateUser(user);
}
// 4. 测试查询所有用户
@Test
public void run4()throws Exception{
//6.使用代理对象执行相应的方法
List<User> users = userDao.findAll();
for (User user : users){
System.out.println(user);
}
}
// 5. 测试按照id查询用户
@Test
public void run5()throws Exception{
User user = userDao.findOne(3);
System.out.println(user);
}
// 6. 测试根据名称模糊查询用户
@Test
public void run6()throws Exception{
List<User> users = userDao.findByName("%t%");
for (User user:users){
System.out.println(user);
}
}
// 7. 查看总用户数
@Test
public void run7()throws Exception{
int num = userDao.findTotal();
System.out.println(num);
}
// 8. 根据条件查询用户
@Test
public void run8()throws Exception{
User user = new User();
user.setName("ppp");
QueryEp ep = new QueryEp();
ep.setUser(user);
List<User> users = userDao.findByQv(ep);
for (User user0:users){
System.out.println(user0);
}
}
}
2.2 编写程序-类和表字段不一致
2.1 User.java
- 这里domain类和数据库表字段名称不一样
- 省略get,set方法,以及toString方法
public class User {
private Integer uid;
private String usename;
private Float rmb;
2.2 IUserDao.java
- 同上
2.3 IUserDao.xml
- 这里是类属性和表字段不一致时的配置
- 因此当返回整行数据时,需要配置列和类属性的对应,才可以封装
- 使用resultMap进行封装返回对象到user类中,返回结果也应该从resulttype改为resultmap
- 这里为domain包下的类配置了别名
<?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.ow.dao.IUserDao"> <!-- 这里用于配置查询列名和实体类的对应关系,
id为返回结果对象的代称,
type表示返回结果对象类型,这里是指com.ow.domain.User,由于指定了别名,因此可以不计较大小写直接使用
表示若返回结果resultType为id(usermap),指的的type类型的对象,两者的字段对应关系如下-->
<resultMap id="userMap" type="user">
<!-- 主键字段 -->
<id property="uid" column="id"></id>
<!-- 非主键字段 -->
<result property="usename" column="name"></result>
<result property="rmb" column="money"></result>
</resultMap> <!-- 1. 插入用户
这里的user即为com.ow.domain.User-->
<insert id="saveUser" parameterType="user">
<selectKey keyProperty="uid" keyColumn="id" resultType="int" order="AFTER">
select last_insert_id();
</selectKey>
insert into account(name,money) values (#{usename},#{rmb});
</insert> <!-- 2. 删除用户 -->
<!-- 这里的uid为方法中的参数 -->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from account where id = #{uid}
</delete> <!-- 3. 更新用户 -->
<delete id="updateUser" parameterType="user">
update account set name=#{usename},money=#{rmb} where id=#{uid}
</delete> <!-- 4. 查询所有用户
这里需将返回结果的接收由resultType改为resultMap
这里的usermap即为上面配置的resultMap的id-->
<select id="findAll" resultMap="userMap">
select * from account
</select> <!-- 5. 查询单个用户 -->
<select id="findOne" resultMap="userMap" parameterType="java.lang.Integer">
select * from account where id = #{uid}
</select> <!-- 6. 根据名称模糊查询用户信息 -->
<select id="findByName" resultMap="userMap" parameterType="java.lang.String">
select * from account where name like #{usename}
</select> <!-- 7. 查询总用户数,返回值的类型需和方法对应 -->
<select id="findTotal" resultType="int" >
select count(id) from account
</select> <!-- 8. 根据对象条件查询 -->
<select id="findByQv" parameterType="queryep" resultMap="userMap">
select * from account where name = #{user.usename}
</select> </mapper>
2.3 测试程序
- 同上,但是set方法需要进行修改
欢迎关注我的公众号,了解一个学设计却做了运营最后成了数据分析师并努力成为大数据工程师的女程序员的成长之路。
ssm整合——Mybatis配置(1)的更多相关文章
- SpringBoot整合mybatis——配置mybatis驼峰命名规则自动转换
一.简述 mybatis驼峰式命名规则自动转换: 使用前提:数据库表设计按照规范“字段名中各单词使用下划线"_"划分”: 使用好处:省去mapper.xml文件中繁琐编写表字段列表 ...
- IDEA环境下SSM整合------环境配置
声明:本文纯为个人笔记整理,如有不妥之处还望及时指出,欢迎转载! 只为解决操作问题,可以从第二幅图往后看! 一.做不出详细的概念叙述和文本设计,本文主要以实战步骤为主,少量解释为辅助,下面请大家牢记两 ...
- 19.SSM整合_配置式开发
1.定义实体类Student 2.定义Student表 3.定义index页面 4.定义处理器 5.定义Service 6.定义Dao接口 7.定义Dao的Mapper配置文件 8.定义MyBatis ...
- SSM整合——spring4.*配置案例
导入spring4.* 相关的jar包和依赖包即可 1.web.xml <?xml version="1.0" encoding="UTF-8"?> ...
- SSM(五)Mybatis配置缓存
1.在没有配置的情况下,mybatis默认开启一级缓存. Object object=mapper.getXxx(object); Object object2=mapper.getXxx(objec ...
- ssm整合——Spring配置(2)
配置Spring 1. 环境准备 使用之前搭建Mabatis的环境 1.1 新建目录 新建spring的service业务逻辑包 在resources目录下新建spring的配置文件:applicat ...
- Spring Boot整合Mybatis配置详解
首先,你得有个Spring Boot项目. 平时开发常用的repository包在mybatis里被替换成了mapper. 配置: 1.引入依赖: <dependency> <gro ...
- 四、SpringBoot整合mybatis——配置mybatis驼峰命名规则自动转换
简述: mybatis驼峰式命名规则自动转换: 使用前提:数据库表设计按照规范“字段名中各单词使用下划线"_"划分”:使用好处:省去mapper.xml文件中繁琐编写表字段列表与表 ...
- 02-MariaDB主从安装SpringBoot整合MyBatis配置
关于MariaDB的介绍 MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为My ...
随机推荐
- golang学习--go中'继承'和多态
golang中没有继承的概念,这个struct属性上的继承,但是可以用匿名字段来模拟这个过程,方法上面的继承要使用接口.多态可以通过接口实现.可以看一下代码. package main import ...
- Install python3
wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz tar xf Python-3.7.4.tgz cd Python-3.7. ...
- "PSP助手”微信小程序宣传视频链接及内容介绍
此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/8677] 队名:扛把子组 组长:迟俊文 组员:刘信鹏 韩昊 宋晓丽 梁梦 ...
- 阿里云上万个 Kubernetes 集群大规模管理实践
点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 汤志敏,阿里 ...
- 安装PHP5和PHP7
5月25日任务 课程内容: 11.10/11.11/11.12 安装PHP511.13 安装PHP7php中mysql,mysqli,mysqlnd,pdo到底是什么http://blog.csdn. ...
- __getattribute__(self, obj) 这个方法中的obj这个参数
class Itcast(object): def __init__(self, subject1): self.subject1 = subject1 print("^^^^^^^---- ...
- xcode8 运行项目时自己打印些东西
使用 Xcode 8 运行工程的时候,在打印台会发现如下这些奇怪的日志输出: 2016-09-19 10:43:44.001757 Demo[7100:171568] subsystem: com.a ...
- Java继承、构造、重写
Music mu=new Music(); Musc m=mu;//地址一样 继承:Java只支持单继承,不支持多继承. Java支持多层(重)继承(继承体系). 如果类之间存在着:is a 的关 ...
- iOS13暂时关闭黑暗模式+应用内状态栏无法显示问题解决办法
现象: iOS13黑暗模式开启后,app显示会出现很多意外显示情况.暂时屏蔽是最好的选择.当开启黑暗模式,且在项目的target对应的info.plist中添加以下设置时(禁用黑暗模式): <k ...
- 带着canvas去流浪系列之六 绘制雷达图
[摘要] 用canvas原生API实现百度Echarts基本图表. 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 任务说明 使用原生canvas ...