IDEA项目搭建四——使用Mybatis实现Dao层

一、引入mybatis及mysql的jar包

可以从阿里云上面查找版本,db操作放在dao层所以打开该层的pom.xml文件,找到<dependencies>节点增加两个引入

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.45</version>
</dependency>

保存后系统会自动下载对应版本的jar包,我们开始编码

 

二、配置mybatis(手动创建)

1.在dao层的src/main下创建和java文件夹同级目录的resources文件夹,它默认会变换类型,如果不变则手动调整一下

2.在resources文件夹下创建mysql.properties文件

填入mysql数据库连接信息

jdbc.driver=com.mysql.jdbc.Driver
#数据库连接允许中文需要指明编码方式
jdbc.url=jdbc:mysql://10.11.12.237:3306/tyh_test?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=root

3.在resources文件夹下创建mybatis_cfg.xml文件

填入mybatis配置信息

<?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="mysql.properties"></properties><!-- 为Java实体设置类别名 --><typeAliases><!-- 设置方式1,一个一个配置 type中放置的是类的全路径,alias中放置的是 类别名<typeAlias type="com.tyh.entity.UserEntity" alias="UserEntity"/> --><!-- 设置方式2,自动扫描,将Java类的类名作为类的 类别名 --><package name="com.tyh.entity"/></typeAliases><!-- 配置mybatis运行环境 --><environments default="dev"><environment id="dev"><!-- 代表使用JDBC的提交和回滚来管理事务 --><transactionManager type="JDBC"/><!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI --><!-- POOLED 表示支持JDBC数据源连接池 --><!-- UNPOOLED 表示不支持数据源连接池 --><!-- JNDI 表示支持外部数据源连接池 --><dataSource type="POOLED"><!-- ${jdbc.driver}代表配置文件中的某一项的key --><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!-- 为mybatis的映射文件mapper.xml设置路径 --><mappers><!-- 映射方式1,一个一个设置<mapper resource="com.tyh.dao.mapper.UserMapper.xml"/> --><!-- 映射方式2,自动扫描包内的Mapper接口与配置文件 --><package name="com/tyh/dao/mapper"/></mappers></configuration>

 4.在src/main/java下创建各自的包,我这里是com.tyh.dao.mapper,在mapper文件夹下创建UserMapper的接口文件,用于编写DB操作函数

public interface UserMapper {/*** 添加用户* @param entity 实体* @return 添加id* @throws Exception*/int add(UserEntity entity) throws Exception;int delete(int id) throws Exception;int update(UserEntity entity) throws Exception;UserEntity get(int id) throws Exception;List<UserEntity> list() throws Exception;
}

 

5.同样在mapper文件夹下创建UserMapper.xml文件,用于编写与接口函数对应的SQL脚本此处切记节点属性不要写错,否则会报错

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--
cache 配置给定命名空间的缓存
cache-ref 从其他命名空间引用缓存配置
resultType 返回值类型
resultMap 描述如何从数据库结果集中装载你的对象
parameterType 参数类型
parameterMap 已过时
sql 可重用的SQL语句块
insert 插入语句
update 更新语句
delete 删除语句
select 查询语句
--><!-- 指明当前xml对应的Mapper -->
<mapper namespace="com.tyh.dao.mapper.UserMapper"><!-- 自定义返回结果集 如果实体属性名与列名一致则不需要此部分,若不一致则需要 --><!--<resultMap id="userMap" type="UserBean">--><!--<id property="id" column="id" javaType="java.lang.Integer"></id>--><!--<result property="username" column="username" javaType="java.lang.String"></result>--><!--<result property="password" column="password" javaType="java.lang.String"></result>--><!--<result property="account" column="account" javaType="java.lang.Double"></result>--><!--</resultMap>--><!-- 各种标签中的id属性与mapper接口中的方法名一一对应,id属性必须唯一不能重复使用,parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型 --><!-- #{}中的内容,为占位符,当参数为某个Entity时,表示放置该Entity对象的属性值  --><!-- useGeneratedKeys:(仅对insert有用)这会告诉MyBatis使用JDBC的getGeneratedKeys方法来取出由数据(比如:像 MySQL 和 SQLServer 这样的数据库管理系统的自动递增字段)内部生成的主键。默认值: false。 --><!-- keyProperty:(仅对 insert有用)标记一个属性, MyBatis 会通过 getGeneratedKeys或者通过 insert 语句的 selectKey 子元素设置它的值。默认:不设置。 --><insert id="add" useGeneratedKeys="true" keyProperty="id">insert into user (username, password, age) values (#{userName},#{password},#{age});</insert><delete id="delete" parameterType="int">delete from user where id=#{id}</delete><update id="update" >update user set username=#{username}, password=#{password}, age=#{age} where id=#{id};</update><!-- select节点必须有resultType属性如果不是自定义结果集就可以直接写实体包名[要含包名的完整类名] --><select id="get" resultType="com.tyh.entity.UserEntity">select * from user where id=#{id};</select><select id="list" resultType="com.tyh.entity.UserEntity">select * from user;</select>
</mapper>

 

6.我们在文件夹内添加的xml及properties文件默认编译不会被复制过去,所以运行时会提示找不到文件,在配置中指明要一起打包文件即可

我这个项目有parent模块,所以在父模块中添加配置,子模块会自动继承,如果没有父模块则单独在demo-dao层的pom.xml文件添加也可

<!-- build节点普遍已经存在了,在其下增加resources等节点 -->
<build><!-- 打包文件内容配置 --><resources><!-- 将src/main/java下的**/*.xml任意目录下的xml文件打包到对应的文件目录中 --><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><!-- 将src/main/resources下的**/*.*任意目录下的任意文件打包到对应的文件目录中 --><resource><directory>src/main/resources</directory><includes><include>**/*.*</include></includes></resource></resources>
</build>

 

7.基础已经准备好了,下面创建数据库Mybatis操作对象,在com.tyh.dao下创建DBTools数据库工具类

public class DBTools {public static SqlSessionFactory sessionFactory;static {try {//使用MyBatis提供的Resources类加载mybatis的配置文件Reader reader = Resources.getResourceAsReader("mybatis_cfg.xml");//构建sqlSession的工厂sessionFactory = new SqlSessionFactoryBuilder().build(reader);} catch (Exception e) {e.printStackTrace();}}//创建能执行映射文件中sql的sqlSessionpublic static SqlSession getSqlSession(){return sessionFactory.openSession();}
}

 

8.编写dao操作层,用于调用底层实现函数

public class UserDao {private SqlSession sqlSession;private UserMapper mapper;public UserDao() {sqlSession = DBTools.getSqlSession();mapper = sqlSession.getMapper(UserMapper.class);}public int add(UserEntity entity) throws Exception {//调用数据库操作函数后需要commit才会提交int result = mapper.add(entity);sqlSession.commit();return result;}public int delete(int id) throws Exception {int result = mapper.delete(id);sqlSession.commit();return result;}public int update(UserEntity entity) throws Exception {int result = mapper.update(entity);sqlSession.commit();return result;}public UserEntity get(int id) throws Exception {UserEntity result = mapper.get(id);sqlSession.commit();return result;}public List<UserEntity> list() throws Exception {List<UserEntity> result = mapper.list();sqlSession.commit();return result;}
}

 

至此Dao层的DB操作已经完成,自己编写service和web调用即可,以下是我项目的结构。

 

注:数据库创建时也需要指明utf8格式编码,否则会出现中文乱码问题 

create database test charset utf8;

 

转载于:https://www.cnblogs.com/taiyonghai/p/9146701.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

连词我们…讨厌

最近&#xff0c;我写了与实现相关的名称&#xff0c;并提供了一些示例&#xff0c;这些示例由于方法名称与主体之间的紧密关系而导致方法名称不正确。 有一会儿&#xff0c;我们有以下代码&#xff1a; boolean isComplexOrUnreadableWithTests() { return (complex || unre…

C#常见编译错误

CSharp类型初始值设定项引发异常&#xff1a;类的静态变量初始化遇到异常&#xff0c;或者构造函数中遇到异常

python函数的 全局变量与局部变量

一、函数的全局变量 1、什么是全局变量 顶着头开始写&#xff0c;没有任何缩进&#xff0c;在py文件的任何位置都能调用 #!/usr/bin/env python # _*_ coding:utf8 _*_ name"gouguoqi"name"gouguoqi" def change_name():print ("111",(name)) …

C#程序将DLL包进EXE方法

有时候我们在发布程序的时候只想发布一个EXE&#xff0c;而编写程序的时候往往会有多个DLL&#xff0c;这个时候如果能把这些DLL装进EXE将是一个很令人振奋的事情&#xff0c;事实上对于C#程序有很多方法如下&#xff1a;1. 使用微软的ILMerge&#xff08;缺点&#xff1a;不支…

org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI

org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI 在重启项目中会遇到[org.springframework.web.servlet.PageNotFound] - No mapping found for HTTP request with URI [*********] in DispatcherServlet with name SpringMVC 这个…

spring本地化默认英文_Spring3国际化和本地化

spring本地化默认英文我最近想将Spring 3提供的国际化和本地化功能添加到我当前的项目之一中。 我浏览了Spring文档&#xff0c;然后在Internet上搜索以找到一些资源。 但是我找不到能够满足客户要求的资源。 大多数教程都像hello world应用程序&#xff0c;它提供了基本的理解…

我所知道的Ribbon库

QT&#xff1a; http://www.devmachines.com/qtitanribbon-overview.html http://qribbon.sourceforge.net MFC、c#可以到微软官方下载 System.Windows.Forms.Ribbon35.DLL - Type: Managed DLL - An Open Source Ribbon Control for .NET WinForm - Read more: http://…

JUnit 5 –动态测试

在定义测试时&#xff0c;JUnit 4有一个很大的弱点&#xff1a;它必须在编译时发生。 现在&#xff0c;JUnit 5将解决此问题&#xff01; Milestone 1 刚刚发布 &#xff0c;并带有全新的动态测试&#xff0c;该动态测试允许在运行时创建测试。 总览 本系列中有关JUnit 5的其他…

win8.1自带metro应用不工作解决办法

输入如下命令 powershell -ExecutionPolicy Unrestricted Add-AppxPackage -DisableDevelopmentMode -Register $Env:SystemRoot\WinStore\AppxManifest.XML powershell -ExecutionPolicy Unrestricted Add-AppxPackage -DisableDevelopmentMode -Register $Env:SystemRoot\Im…

python基础-网络基础知识和网络编程

之前对这一块的知识,总是记不住,这次正好有系统的学习,所以决定好好的梳理一下 1. 计算机网络基础知识 1.1 互联网协议和OSI模型 *协议模型互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层,如下图所示 *每层运行常见物理设备 *每层运行常见的协议 1.2 基础网络概念…

HDU 1999 不可摸数

不可摸数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5334 Accepted Submission(s): 1405 Problem Descriptions(n)是正整数n的真因子之和&#xff0c;即小于n且整除n的因子和.例如s(12)1234616.如果任…

C语言返回文件大小的功能(fseek和ftell的使用)

需求&#xff1a;有时候读文件时&#xff0c;需要知道文件的字符总的个数&#xff0c;可能是为了提前定义缓冲区大小或者拷贝文件等等。也可以用于动态创建数组。在进行这两个问题之前&#xff0c;先来了解一下两个函数&#xff0c;这两个函数配合就能够实现计算大小的功能。函…

自定义相册、九宫格显示图片

一 自定义相册 结合Glide图片库&#xff0c;加载显示本地图片&#xff0c;并可以实现单选&#xff0c;多选&#xff0c;预览功能。特点 加载最近新增图片&#xff0c;GridView显示分文件夹选择图片支持单选&#xff0c;多选&#xff08;最大9张&#xff09;支持大图预览以库的形…

设计一代码,逆置带头结点的动态单链表L

有两种方法&#xff1a; 一是&#xff1a;用头插法建立单链表&#xff0c;自然而然就实现了逆置的动态链表。 代码&#xff1a; #include<stdio.h> #include<malloc.h> typedef int datatype; typedef struct node {datatype data;struct node * next; }linklist…

dll生成lib

来自http://suddymail.org/show-160-1.html没有尝试过&#xff0c;仅供参考。其他链接&#xff1a;http://hi.baidu.com/songxiuying/item/af67755203840f948d12ed6d为无LIB的DLL制作LIB函数符号输入库 本文介绍了在VC中针对无LIB时的DLL隐式链接,制作可供VC使用的LIB函数符号…

maven使用junit3_JUnit,Logback,带有Maven 3的Maven

maven使用junit3在本系列中&#xff0c;我们已经学习了建立基本的Spring MVC应用程序并学习了如何在Spring MVC中处理表单 。 现在该讨论更多涉及的话题了。 但是&#xff0c;在我们涉足更深的领域之前&#xff0c;让我们先进行一些基础设置。 单元测试 我不是TDD传播者。 我在…

LeetCode(90):子集 II

Medium&#xff01; 题目描述&#xff1a; 给定一个可能包含重复元素的整数数组 nums&#xff0c;返回该数组所有可能的子集&#xff08;幂集&#xff09;。 说明&#xff1a;解集不能包含重复的子集。 示例: 输入: [1,2,2] 输出: [[2],[1],[1,2,2],[2,2],[1,2],[] ] 解题思路&…

MFC程序在其他机器运行

为了保证MFC程序能够在没有安装VS的机器上运行&#xff0c;可以采用如下方法。1. 单个的小程序&#xff0c;可以静态编译MFC&#xff0c;但不适用于有很多dll的工程。2. 拷贝VS安装目录Microsoft Visual Studio 11.0\VC\redist\x86\Microsoft.VC110.MFC下的4个文件和Microsoft …

ACM搜索题目总结

ACM搜索题目总结 格式说明&#xff1a;题目名后面列出个人此题的大致难度&#xff08;对菜鸟而言&#xff09; POJ 1069 -The Bermuda Triangle(难) http://acm.pku.edu.cn/JudgeOnline/problem?id1069 题意&#xff1a;用给定三角型填充六边形 解法&#xff1a;此题的思想上精…

JPA中按身份引用

在上一篇文章中 &#xff0c;我提到我选择通过其主键而不是类型来引用其他聚合。 在处理大型或复杂域模型时&#xff0c;我通常使用这种方法&#xff08;也称为断开域模型&#xff09;。 在这篇文章中&#xff0c;让我尝试进一步解释如何在JPA中完成它。 请注意&#xff0c;生成…