《MyBatis进阶记:当字段名开始“叛逆“》
各位代码冒险家,还记得我们上次那个乖巧的Student类吗?它长大了,进入了"叛逆期"!现在的它不再是那个简单的"四有青年",而是变成了一个"我有我主张"的个性少年。
第一章:Student的"叛逆宣言"
看这个叛逆的字段名:
java
private String s_sex; // 原来叫sex,现在非要加个前缀!
原来的`sex`字段被注释掉了,取而代之的是`s_sex`。这就像一个人突然说:"我不叫张三了,请叫我'超级张三·风暴降生'!"
更搞笑的是,数据库里的字段还叫`sex`,这就产生了"命名不一致的悲剧"。好在MyBatis派出了救兵——`resultMap`!
第二章:resultMap——字段名的"婚姻介绍所"
xml
<resultMap id="demo" type="com.qcby.entity.Student">
<result column="sex" property="s_sex"></result>
</resultMap>
这个`resultMap`就像一个耐心的媒婆,对数据库说:"你那边叫'sex'是吧?别担心,我们这边虽然叫's_sex',但我来帮你们牵线搭桥!"
有了它,`select * from student`这个简单的查询也能正确匹配了。这就是"名字不一样,照样做朋友"的典范!
第三章:StudentDao的"功能大爆发"
原来的Dao接口只是个光说不练的"空想家",现在它变成了真正的"实干派":
java
public interface StudentDao {
public List<Student> findAll(); // 查全部
public Student findById(int id); // 按ID精确查找
public int insert(Student student); // 插入新学生
public int delete(int id); // 删除学生
public int update(Student student); // 修改信息
public List<Student> findByName(String name); // 模糊查找
}
这就像一个人突然学会了十八般武艺,从"只会吃饭"升级到了"满汉全席大厨"!
第四章:XML里的"SQL魔法大全"
每个方法都有对应的SQL咒语,其中最有趣的是这个:
xml
<select id="findByName" resultType="com.qcby.entity.Student" parameterType="java.lang.String">
select * from student where name like '%${value}%'
</select>
这行代码就像在说:"数据库老弟,帮我找名字里带'张'的所有人,不管'张'在名字的哪个位置!"
但注意看注释里的重要提示:
- #{} 是乖孩子,会防SQL注入
- ${} 是野孩子,直接拼接SQL,有风险!
这就好比:
- #{}:礼貌敲门:"请问'张'先生在吗?"
- ${}:破门而入:"我找名字里有张的!都出来!"
第五章:TestStudent的"专业升级"
原来的测试类像个"业余玩家",现在变成了"专业选手":
java
@Before
public void init() throws IOException {
// 初始化工作:准备战场!
}
@After
public void destory() throws IOException {
// 清理工作:打扫战场!
}
有了@Before和@After,测试方法变得干净利落,就像有了专业的"开场白"和"结束语"。
最搞笑的是被注释掉的`insert`和`update`测试方法,它们就像两个被禁足的孩子,只能在代码里眼巴巴地看着别人玩耍:
java
// @Test
// public void insert() {
// Student student = new Student();
// student.setName("cici");
// student.setAge(20);
// student.setSex("女"); // 等等,这个setSex()不是被注释掉了吗?
// }
看到问题了吗?`Student`类里根本没有`setSex()`方法了,只有`setS_sex()`!这就像试图用一个过期的密码开锁——注定失败!
第六章:事务管理的"潜规则"
注意看这些修改操作后面的这行代码:
java
session.commit(); // 提交事务!
没有这行代码,你的修改就像写在了沙滩上——潮水一来就没了。MyBatis默认不会自动提交,这就像银行转账需要你最后点"确认"一样。
代码世界的"人生哲理"
1. 命名一致性很重要:字段名变来变去,最后苦的是`resultMap`这个"和事佬"
2. 安全第一:能用`#{}`就别用`${}`,就像能用安全带就别玩命
3. 测试要全面:别让某些测试方法永远被注释,它们会"寂寞"的
4. 事务要提交:做了事情要确认,不然等于白干
结语
这次的代码升级就像一场"青春期的成长":
Student学会了"个性命名"
Dao接口学会了"多项技能"
测试类学会了"专业素养"
唯一没变的是:MyBatis依然是我们可靠的"数据红娘",即使字段名再怎么"叛逆",它都能想办法让数据库和Java对象"喜结连理"!
🎯 程序员心得:在代码的世界里,不一致是常态,解决方案才是王道!下次遇到字段名对不上的情况,记得请出resultMap这位"和事佬"哦!