本文共 8598 字,大约阅读时间需要 28 分钟。
思路:搭建环境–>导入Mybatis–>编写代码–>测试
CREATE DATABASE `mybatis`;USE `mybatis`;DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`id` int(20) NOT NULL,`name` varchar(30) DEFAULT NULL,`pwd` varchar(30) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert into `user`(`id`,`name`,`pwd`) values (1,'狂神','123456'),(2,'张三','abcdef'),(3,'李四','987654');
package com.jsp.pojo;public class User { private Integer id; private String name; private String pwd; public User() { } public User(Integer id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getname() { return name; } public void setUsername(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; }}
//mybatis依赖 org.mybatis mybatis 3.5.2 //数据库连接依赖 //资源过滤mysql mysql-connector-java 5.1.47 src/main/java **/*.properties **/*.xml false src/main/resources **/*.properties **/*.xml false
package com.jsp.utils;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;import java.io.InputStream;public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { String resource = "Mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //获取SqlSession连接 public static SqlSession getSession(){ return sqlSessionFactory.openSession(); }}
package com.jsp.dao;import com.jsp.pojo.User;import java.util.List;public interface UserMapper { //查询所有用户 ListselectUser();}
package com.jsp.dao;import com.jsp.pojo.User;import com.jsp.utils.MybatisUtils;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import java.util.List;public class MyTest { @Test public void selectUser() { SqlSession sqlSession = MybatisUtils.getSession();// 方式一// UserMapper mapper = sqlSession.getMapper(UserMapper.class);// Listusers = mapper.selectUser();// 方式二 List users = sqlSession.selectList("com.jsp.dao.UserMapper.selectUser"); for (User user : users) { System.out.println(user); } sqlSession.close(); }}
<select id="selectUserByIdAndPassword" parameterType="map" resultType="user"> select * from user where name = #{name} and pwd = #{pwd} </select>
//通过密码和名字查询用户User selectUserByNP(@Param("username") String username,@Param("pwd") String pwd);/* */
1.接口
User selectUserByNP2(Mapmap);
2.sql语句
3.调用方法
Mapmap = new HashMap ();map.put("username","小明");map.put("pwd","123456");User user = mapper.selectUserByNP2(map);
设置别名
//查询全部用户@Select("select id,name,pwd password from user")public ListgetAllUser();
2.在Mybatis-config.xml中绑定接口
3.测试
@Testpublic void testGetAllUser() { SqlSession session = MybatisUtils.getSession(); //本质上利用了jvm的动态代理机制 UserMapper mapper = session.getMapper(UserMapper.class); Listusers = mapper.getAllUser(); for (User user : users){ System.out.println(user); } session.close();}
@Param注解用于给方法参数起一个名字。以下是总结的使用原则:1.在方法只接受一个参数的情况下,可以不使用@Param。2.在方法接受多个参数的情况下,建议一定要使用@Param注解给参数命名。3.如果参数是 JavaBean , 则不能使用@Param。4.不使用@Param注解时,参数只能有一个,并且是Javabean
1.数据库设计
CREATE TABLE `teacher` (`id` INT(10) NOT NULL,`name` VARCHAR(30) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO teacher(`id`, `name`) VALUES (1, '秦老师');CREATE TABLE `student` (`id` INT(10) NOT NULL,`name` VARCHAR(30) DEFAULT NULL,`tid` INT(10) DEFAULT NULL,PRIMARY KEY (`id`),KEY `fktid` (`tid`),CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)) ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('1', '小明', '1');INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('2', '小红', '1');INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('3', '小张', '1');INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('4', '小李', '1');INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('5', '小王', '1');
2.引入Lombok插件
org.projectlombok lombok 1.16.10
3.编写实体类
@Data //GET,SET,ToString,有参,无参构造public class Teacher { private int id; private String name;}
@Datapublic class Student { private int id; private String name; //多个学生可以是同一个老师,即多对一 private Teacher teacher;}
4.编写Mapper接口
public interface StudentMapper { }
public interface TeacherMapper { }
5.编写Mapper.xml配置文件
多对一 : association
一对多 : collection
JavaType和ofType都是用来指定对象类型的JavaType是用来指定pojo中属性的类型ofType指定的是映射到list集合属性中pojo的类型
update blog where id = #{ id}; title = #{ title}, author = #{ author}
与数据库同一次会话期间查询到的数据会放在本地缓存中。
以后如果需要获取相同的数据,直接从缓存中拿,没必须再去查询数据库
转载地址:http://njyki.baihongyu.com/