使用代理dao的方式实现增删改查(基本都采用此方式)
为dao接口创建增删改查函数
package com.gegege.dao; import com.gegege.domain.User; import java.util.List; public interface IUserDao { /** * 查询所有用户 */ List<User> findAll(); /** * 插入一个用户 */ void installUser(User user); /** * 更新数据 */ void upDateUser(User user); /** * 删除数据 */ void deleteUser(int userid); /** *根据id查找一个人 */ User findById(Integer userid); /** * 根据姓名模糊查询用户信息 */ List<User> findByName(String name); }
创建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> <environments default="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/mybatis"/> <property name="username" value="root"/> <property name="password" value="adminadmin"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/gegege/dao/IUserDao.xml"/> </mappers> </configuration>
创建IUserDao.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.gegege.dao.IUserDao"> <select id="findAll" resultType="com.gegege.domain.User"> select * from user ; </select> <insert id="installUser" parameterType="com.gegege.domain.User"> insert into user (username,address,sex,birthday) values ( #{username},#{address},#{sex},#{birthday} ); </insert> <update id="upDateUser" parameterType="com.gegege.domain.User"> update user set username=#{username} , address = #{address} , sex=#{sex} ,birthday=#{birthday} where id = #{id}; </update> <delete id="deleteUser" parameterType="java.lang.Integer"> delete from user where id = #{uid}; </delete> <select id="findById" resultType="com.gegege.domain.User" parameterType="java.lang.Integer"> select * from user where id = #{uid}; </select> <select id="findByName" resultType="com.gegege.domain.User" parameterType="java.lang.String" > select * from user where username like #{name}; </select> </mapper>
使用test调用
package com.gegege; import com.gegege.dao.IUserDao; import com.gegege.domain.User; 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 org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.Date; import java.util.List; import java.util.Random; public class mybatis_test { private InputStream in; private SqlSessionFactoryBuilder sessionFactoryBuilder; private SqlSessionFactory sqlSessionFactory; private SqlSession session; private IUserDao dao; @Before public void before() throws IOException { in = Resources.getResourceAsStream("SqlMapConfig.xml"); //创建工具 sessionFactoryBuilder=new SqlSessionFactoryBuilder(); //创建工厂 sqlSessionFactory=sessionFactoryBuilder.build(in); //生产session session=sqlSessionFactory.openSession(); //使用sqlsession 创建代理对象 dao=session.getMapper(IUserDao.class); } @After public void after() throws IOException { //提交操作 session.commit(); //释放资源 session.close(); in.close(); } /** * 测试查找 * @throws IOException */ @Test public void testFindAll() { //调用findall List<User> users=dao.findAll(); for (User user:users ) { System.out.println(user); } } /** * 测试插入 */ @Test public void testInstall(){ User user=new User(); user.setUsername("ddd"); user.setAddress("aaa"); user.setBirthday(new Date()); user.setSex("狗"); dao.installUser(user); } /** * 测试修改 */ @Test public void testUpDate() { User user=new User(); int num=new Random().nextInt(); user.setId(41); user.setUsername("ddd"+ num); user.setAddress("aaa" + num); user.setBirthday(new Date()); user.setSex("狗"); dao.upDateUser(user); } /** * 测试删除 */ @Test public void testdelete() { dao.deleteUser(52); } /** * 测试查询一用户 */ @Test public void testoneuserA() { User user = dao.findById(48); System.out.println(user); } /** * 测试模糊查询 */ @Test public void name() { List<User> users = dao.findByName("%王%"); users.forEach(System.out :: println); } }
使用实现类的方式进行增删改查
在原通过代理对象实现的方式修改:
1.创建新的类继承dao接口
这里注意,添加一个session工厂对象,并重写构造方法,传入session工厂,方便下面进行调用
package com.gegege.dao.impl; import com.gegege.dao.IUserDao; import com.gegege.domain.User; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import java.util.List; public class UserDao implements IUserDao { private SqlSessionFactory factory; public UserDao() { } public UserDao(SqlSessionFactory factory){ this.factory=factory; } @Override public List<User> findAll() { //根据factory获取session SqlSession session = factory.openSession(); //调用方法 List<User> users = session.selectList("com.gegege.dao.IUserDao.findAll"); //释放资源 session.close(); return users; } @Override public void installUser(User user) { //根据factory获取session SqlSession session = factory.openSession(); //调用方法实现保存 session.insert("com.gegege.dao.IUserDao.installUser",user); //提交事务 session.commit(); //释放资源 session.close(); } @Override public void upDateUser(User user) { } @Override public void deleteUser(int userid) { } @Override public User findById(Integer userid) { return null; } @Override public List<User> findByName(String name) { return null; } }
2.对测试类进行更改
2.1 先删除session,因为在实现类里传入了session工厂,则session没有作用了
2.2 将dao 改为实例化的方式创建 即new UserDao(sqlSessionFactory);
package com.gegege; import com.gegege.dao.IUserDao; import com.gegege.dao.impl.UserDao; import com.gegege.domain.User; 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 org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Random; public class mybatis_test { private InputStream in; private SqlSessionFactoryBuilder sessionFactoryBuilder; private SqlSessionFactory sqlSessionFactory; private IUserDao dao; @Before public void before() throws IOException { in = Resources.getResourceAsStream("SqlMapConfig.xml"); //创建工具 sessionFactoryBuilder=new SqlSessionFactoryBuilder(); //创建工 sqlSessionFactory=sessionFactoryBuilder.build(in); //生产session //使用sqlsession 创建代理对象 dao=new UserDao(sqlSessionFactory); } @After public void after() throws IOException { //提交操作 in.close(); } /** * 测试查找 * @throws IOException */ @Test public void testFindAll() { //调用findall List<User> users=dao.findAll(); for (User user:users ) { System.out.println(user); } // int[] num; // num.length } /** * 测试插入 */ @Test public void testInstall(){ User user=new User(); user.setUsername("ddd"); user.setAddress("aaa"); user.setBirthday(new Date()); user.setSex("狗"); dao.installUser(user); } /** * 测试修改 */ @Test public void testUpDate() { User user=new User(); int num=new Random().nextInt(); user.setId(41); user.setUsername("ddd"+ num); user.setAddress("aaa" + num); user.setBirthday(new Date()); user.setSex("狗"); dao.upDateUser(user); } /** * 测试删除 */ @Test public void testdelete() { dao.deleteUser(52); } /** * 测试查询一用户 */ @Test public void testoneuser() { User user = dao.findById(48); System.out.println(user); } /** * 测试模糊查询 */ @Test public void name() { List<User> users = dao.findByName("%王%"); users.forEach(System.out :: println); } @Test public void tttt() { } public int[] twoSum(int[] nums, int target) { HashMap<Integer,Integer> hash=new HashMap<>(); for (int i=0;i<nums.length;i++){ hash.put(nums[i],i); } for (int i=0;i<nums.length;i++){ int num = target-nums[i]; if (hash.containsKey(num)){ int[] o = {i,hash.get(num)}; return o; } } return null; } }
properties标签
在SqlMapConfig.xml的使用 <properties resource="jdbcConfig.properties"/>
语句来指定配置文件,jdbcConfig.properties文件内容为:
jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis jdbc.username=root jdbc.password=admin
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"> <!--mybatis主配置文件--> <configuration> <properties resource="jdbcConfig.properties"/> <!-- 配置环境 --> <environments default="mysql"> <!--配置mysql环境--> <environment id="mysql"> <!--配置事务--> <transactionManager type="JDBC"></transactionManager> <!--配置数据源(连接池)--> <dataSource type="POOLED"> <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> <!--指定映射配置文件,即每个dao独立的配置文件--> <mappers> <mapper resource="com/xiongshou/dao/IUserDao.xml"/> </mappers> </configuration>
此时代码仍可正常执行
声明别名
有两种方式配置别名
<typeAliases> <!--声明单个别名--> <!-- <typeAlias type="com.gegege.domain.User" alias="user" />--> <!--声明包,则包下所有类都自动生成别名--> <package name="com.gegege.domain"/> </typeAliases>