java-web的mybatis的学习
idea开发必须是把Mapper文件与配置文件放到Resources标记的classpath目录下,eclips好像放到哪都行指定好路径就可以了,
maven里面做好配置resources的路径,不然更新依赖 工程结构标记又没了
<build>
<resources>
<resource>
<directory>src/main/java/Resources</directory>
</resource>
</resources>
</build>

1.原生使用sqlsessionFcatory去做数据库操作,很麻烦
@Test
public void qeryByNameTest() throws IOException {
//加载核心配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//创造sqlsessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> list= sqlSession.selectList("user.queryByName","王五");
for (User u:list){
System.out.println(u.toString());
}

2.使用mapper动态代理由mybatis根据你的 mapper类的接口名与映射文件里面的id名一致,指明了namespace的是哪个mapper类即可
public interface UserMapper {
//遵循四个原则
//接口 方法名 == User.xml 中 id 名
//返回值类型 与 Mapper.xml文件中返回值类型要一致
//方法的入参类型 与Mapper.xml中入参的类型要一致
//命名空间 绑定此接口
public User queryById(Integer id);
}
@Test
public void userMapperTest(){
InputStream inputStream = null;
{
try {
inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
} catch (IOException e) {
e.printStackTrace();
}
}
//创造sqlsessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession= sqlSessionFactory.openSession();
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
User user= userMapper.queryById(10);
System.out.println(user);
}

SqlMapConfig.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>
<!-- 是用resource属性加载外部配置文件 比如jdbc信息,公共常量配置信息-->
<properties resource="jdbc.properties"></properties>
<!--配置别名 方便开发中的 (多半的返回值与参数值是实体类)使用简单的缩写类名,而不是全路径 在就可以使用设置的别名了
别名大小写不敏感-->
<typeAliases>
<!--<typeAlias type="com.web.mybatis.pojo.User " alias="User"></typeAlias>-->
<!--扫描此包 及子包下所有的类文件-->
<package name="com.web.mybatis.pojo" ></package>
</typeAliases>
<!-- 和spring整合后 environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 可配置数据库连接池或者 使用上面properties里面的信息${username}-->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!--告诉你的sql mapper文件在哪 这个sqlMapConfig做统一管理-->
<mappers> <!--注册指定包下的所有mapper接口 使用iDEA要在resources目录下去存放mapper文件--> <mapper resource="Mapper/UserMapper.xml" ></mapper> <!--如:<package name="cn.web.mybatis.mapper"/>-->
<!--注意: 此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。–>-->
</mappers> </configuration> 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文件就是写sql语句的,mybatis只需要程序员关注sql语句本身-->
<!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 比如queryById在两个mapper xml都有这个id,为了区分使用namespace -->
<mapper namespace="com.web.mybatis.mapper.UserMapper">
<select id="queryById" parameterType="Integer" resultType="User">
select * from user where id=#{v}
</select> <!-- //根据用户名称模糊查询用户列表
#{} select * from user where id = ? 占位符 ? == '五'
${} select * from user where username like '%五%' 字符串拼接 -->
<!---- select * from `user` where username like #{name}--> <select id="queryByName" parameterType="String" resultType="user">
select * from `user` where username like '%${value}%'
</select> <!-- 保存用户 -->
<!-- selectKey 标签实现主键返回 -->
<!-- keyColumn:主键对应的表中的哪一列 -->
<!-- keyProperty:主键对应的pojo中的哪一个属性 -->
<!-- order:设置在执行insert语句前执行查询id的sql,孩纸在执行insert语句之后执行查询id的sql -->
<!-- resultType:设置返回的id的类型 -->
<insert id="saveUser" parameterType="user">
<selectKey keyColumn="id" keyProperty="id" resultType="Int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO `user`
(username,birthday,sex,address) VALUES
(#{username},#{birthday},#{sex},#{address})
</insert> <update id="updateUserById" parameterType="user">
UPDATE `user` SET
username = #{username} WHERE id = #{id}
</update> <!-- 删除用户 -->
<delete id="deleteUserById" parameterType="int">
delete from user where
id=#{id}
</delete>
</mapper>
java-web的mybatis的学习的更多相关文章
- java web (j2ee)学习路线 —— 将青春交给命运
RESON TO DO JAVA WEB:1.JAVA WEB(企业级) 2.Android和iOS过于火爆并且不兼容 一.JAVA WEB开发需要的知识储备 1. 基本的网页设计语言:H ...
- java web 整合开发王者归来学习总结
第一章java web开发概述 胖客户端CS,瘦客户端BS(Browser) 网址请求---服务器处理响应-----返回结果-----浏览器显示 CGI可以动态生成页面,但是每个进程都要启动一个CGI ...
- java web(七): mybatis的动态sql和mybatis generator自动生成pojo类和映射文件
前言: MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据 不同条件拼接 SQL 语句的痛苦.例如拼接时要确保不能忘记添加必要的空格,还 ...
- Java Web开发中MVC设计模式简介
一.有关Java Web与MVC设计模式 学习过基本Java Web开发的人都已经了解了如何编写基本的Servlet,如何编写jsp及如何更新浏览器中显示的内容.但是我们之前自己编写的应用一般存在无条 ...
- java web 开发三剑客 -------电子书
Internet,人们通常称为因特网,是当今世界上覆盖面最大和应用最广泛的网络.根据英语构词法,Internet是Inter + net,Inter-作为前缀在英语中表示“在一起,交互”,由此可知In ...
- Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问
本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...
- Java Web 学习路线
实际上,如果时间安排合理的话,大概需要六个月左右,有些基础好,自学能力强的朋友,甚至在四个月左右就开始找工作了.大三的时候,我萌生了放弃本专业的念头,断断续续学 Java Web 累计一年半左右,总算 ...
- 我推荐的 Java Web 学习路线
晚上再 V2 的 Java 的节点看到有人问 Java Web 书籍推荐.我这半年多的时间,也从别的方向开始转向 Java 服务端开发,所以,我来说下我的学习路线,帮助有需要的朋友把半只脚踏进 Spr ...
- JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识
JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...
- Java Web编程技术学习要点及方向
学习编程技术要点及方向亮点: 传统学习编程技术落后,应跟著潮流,要对业务聚焦处理.要Jar, 不要War:以小为主,以简为宝,集堆而成.去繁取简 Spring Boot,明日之春(future of ...
随机推荐
- MySQL8.0.11 组复制配置
my.cnf [mysql] prompt='node2 [\h] {\u} (\d) > ' # [client] user = sa password = cc.123 port = 22 ...
- Redis入门到高可用(七)——Hash
一.结构 Mapmap结构: filed 不能相同,value可以相同. 二.重要指令 ♦️ HSET ♦️ HGET ♦️ HDEL ♦️ Hlen ♦️ HEXISTS ♦️HGETALL ...
- 进程池线程池 协程 gvent 单线程实现并发套接字
1.基于多线程实现套接字服务端支持并发 服务端 from socket import * from threading import Thread def comunicate(conn): whil ...
- CentOS里alias命令
alias命令 功能描述:我们在进行系统的管理工作一定会有一些我们经常固定使用,但又很长的命令.那我们可以给这些这一长串的命令起一个别名.之后还需要这一长串命令时就可以直接以别名来替代了.系统中已经有 ...
- (转)java调用python脚本
这篇博客旨在吐血分享今天遇到的java调用python脚本遇到的坑,折腾了3个多小时终于可以跑通了,代码超级短,但网上的好多资料都是抄来抄去的,很少有能够直接跑通的,尤其是针对你的python文件中用 ...
- 调用另一个文件的python代码【转载】
转自:https://blog.csdn.net/u010412719/article/details/47089883 例如我们有a.py和b.py两个文件,当我们需要在b.py文件中应用a.py中 ...
- element后太侧边
$router 是已经在ruterJs里面定义好的路由 以及组件 然后取值赋予进去就是了.但是真正的写法应该是 这样,, 执行点击事件的时候直接让跟换路由., 让后面 router-view 里面路由 ...
- 笔记:yum和apt-get的区别
rpm包和deb包是两种Linux系统下最常见的安装包格式,在安装一些软件或服务的时候免不了要和它们打交道. rpm包主要应用在RedHat系列包括 Fedora等发行版的Linux系统上, deb包 ...
- Python字典和集合的内部实现
1. 哈希表(Hash tables) 在Python中,字典是通过哈希表实现的.也就是说,字典是一个数组,而数组的索引是经过哈希函数处理后得到的.哈希函数的目的是使键均匀地分布在数组中.由于不同的键 ...
- 梯度下降法(BGD、SGD)、牛顿法、拟牛顿法(DFP、BFGS)、共轭梯度法
一.梯度下降法 梯度:如果函数是一维的变量,则梯度就是导数的方向: 如果是大于一维的,梯度就是在这个点的法向量,并指向数值更高的等值线,这就是为什么求最小值的时候要用负梯度 梯度下降法(Gr ...